// testtemplates.cpp --- semantic-ia-utest completion engine unit tests // Copyright (C) 2008-2021 Free Software Foundation, Inc. // Author: Eric M. Ludlam // This file is part of GNU Emacs. // GNU Emacs is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // GNU Emacs is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with GNU Emacs. If not, see . // TODO - this probably means can't be part of emacs, as I don't know who this guy is. // Written by 'Raf' template class read_ref { public: const T* read_ref_member_one( T); const V* read_ref_member_two(); }; namespace NS { template class ref { public: read_ref operator->() { m_// -1- ; // #1# ( "m_datas" ) } private: T m_datas[U]; }; } class FooOne { public: int fooOneMember(); }; class FooTwo { public: int fooTwoMember(); }; class FooThree { public: int fooThreeMember(); FooOne * operator->(); }; typedef ref Test; using NS; void main(void) { ref v; v->read_ref_member_one()-> // -2- ; // #2# ( "fooOneMember" ) v->read_ref_member_two()-> // -3- ; // #3# ( "fooTwoMember" ) v-> // -4- ; // #4# ( "read_ref_member_one" "read_ref_member_two" ) Test t; t->read_ref_member_two()-> // -5- ; // #5# ( "fooTwoMember" ) ref v2; v2->read_ref_member_two()-> // -6- ; // #6# ( "fooOneMember" ) /* Try all these things by also specifying the namespace in the name. */ NS::ref v3; v3->read_ref_member_one()-> // -7- ; // #7# ( "fooOneMember" ) v3->read_ref_member_two()-> // -8- ; // #8# ( "fooTwoMember" ) v3->read_ref_member_two// @1@ 5 ; } // More Namespace Magic using member constants. template struct isFooLike { static const bool value = false; }; template <> struct isFooLike { static const bool value = true; }; template class A { public: A(); void foo() {}; }; template class FooFour : public A::value> { public: bool bar() {} }; int main2() { FooFour ff; ff.// - 9- @ TODO - bring over patch from SF ; // #9# ( "bar" "foo" ); }