1a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple -emit-llvm-only %s 26181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer// Check that we don't crash. 36181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer// PR12305, PR12315 46181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 56181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer# 1 "a.h" 3 66181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename T1 > struct Types1 76181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 86181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef T1 Head; 96181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 106181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > struct Types; 116181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class Tmpl > struct TemplateSel 126181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 136181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < typename T > struct Bind 146181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 156181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef Tmpl < T > type; 166181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 176181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 186181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > struct NoneT; 196181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class T1, template < typename > class > struct Templates2 206181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 216181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef TemplateSel < T1 > Head; 226181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 236181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class, template < typename > class = 246181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer NoneT, template < typename > class = NoneT, template < typename > class = 256181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer NoneT > struct Templates; 266181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class T1, 276181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < typename > class T2 > struct Templates <T1, T2 > 286181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 296181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef Templates2 < T1, T2 > type; 306181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 316181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename T > struct TypeList 326181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 336181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef Types1 < T > type; 346181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 356181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class, class TestSel, 366181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename Types > class TypeParameterizedTest 376181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 386181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerpublic:static bool Register () 396181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 406181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef typename Types::Head Type; 416181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename TestSel::template Bind < Type >::type TestClass; 426181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}}; 436181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 446181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < template < typename > class Fixture, typename Tests, 456181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename Types > class TypeParameterizedTestCase 466181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 476181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerpublic:static bool Register (char *, char *, int *) 486181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 496181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef typename Tests::Head Head; 506181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TypeParameterizedTest < Fixture, Head, Types >::Register; 516181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}}; 526181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 536181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > class TypedTestP1 546181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 556181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 566181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 576181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace gtest_case_TypedTestP1_ 586181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 596181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < typename gtest_TypeParam_ > class A:TypedTestP1 < 606181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer gtest_TypeParam_ > 616181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 626181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 636181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename gtest_TypeParam_ > class B:TypedTestP1 < 646181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer gtest_TypeParam_ > 656181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 666181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 676181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef Templates < A >::type gtest_AllTests_; 686181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 696181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 706181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > class TypedTestP2 716181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 726181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 736181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 746181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace gtest_case_TypedTestP2_ 756181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 766181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < typename gtest_TypeParam_ > class A:TypedTestP2 < 776181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer gtest_TypeParam_ > 786181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer { 796181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 806181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef Templates < A >::type gtest_AllTests_; 816181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 826181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 836181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerbool gtest_Int_TypedTestP1 = 846181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TypeParameterizedTestCase < TypedTestP1, 856181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer gtest_case_TypedTestP1_::gtest_AllTests_, 866181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TypeList < int >::type >::Register ("Int", "TypedTestP1", 0); 876181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerbool gtest_Int_TypedTestP2 = 886181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TypeParameterizedTestCase < TypedTestP2, 896181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer gtest_case_TypedTestP2_::gtest_AllTests_, 906181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TypeList < Types < int > >::type >::Register ("Int", "TypedTestP2", 0); 916181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 926181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp > struct new_allocator 936181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 946181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef _Tp *pointer; 956181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < typename > struct rebind { 966181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef new_allocator other; 976181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 986181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 996181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp > struct allocator:new_allocator < _Tp > { 1006181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 1016181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp, typename _Alloc > struct _Vector_base { 1026181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type; 1036181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer struct _Vector_impl { 1046181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename _Tp_alloc_type::pointer _M_end_of_storage; 1056181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 1066181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Vector_base () { 1076181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer foo((int *) this->_M_impl._M_end_of_storage); 1086181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer } 1096181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer void foo(int *); 1106181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Vector_impl _M_impl; 1116181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 1126181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp, typename _Alloc = 1136181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerallocator < _Tp > >struct vector:_Vector_base < _Tp, _Alloc > { }; 1146181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 1156181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 1166181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < class T> struct HHH {}; 1176181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstruct DDD { int x_;}; 1186181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstruct Data; 1196181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstruct X1; 1206181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstruct CCC:DDD { virtual void xxx (HHH < X1 >); }; 1216181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < class SSS > struct EEE:vector < HHH < SSS > > { }; 1226181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < class SSS, class = EEE < SSS > >class FFF { }; 1236181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < class SSS, class GGG = EEE < SSS > >class AAA:FFF <GGG> { }; 1246181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerclass BBB:virtual CCC { 1256181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer void xxx (HHH < X1 >); 1266181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer vector < HHH < X1 > >aaa; 1276181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 1286181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerclass ZZZ:AAA < Data >, BBB { virtual ZZZ *ppp () ; }; 1296181e56a44ecc31dfca8baea2ae8738957003496Benjamin KramerZZZ * ZZZ::ppp () { return new ZZZ; } 1306181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 1316181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace std 1326181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer{ 1336181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < class, class > struct pair; 1346181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 1356181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace __gnu_cxx { 1366181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > class new_allocator; 1376181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 1386181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace std { 1396181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp > class allocator:__gnu_cxx::new_allocator < _Tp > { 1406181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 1416181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename, typename > struct _Vector_base { 1426181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 1436181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:_Vector_base < _Tp, 1446181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Alloc 1456181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer > { 1466181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 1476181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 1486181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer 1496181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace 1506181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstd { 1516181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1526181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename, 1536181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename > struct unary_function; 1546181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1556181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename, 1566181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename, 1576181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename > struct binary_function; 1586181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1596181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename 1606181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Tp > struct equal_to: 1616181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer binary_function < 1626181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Tp, 1636181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Tp, 1646181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer bool > { 1656181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 1666181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1676181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename 1686181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Pair > struct _Select1st: 1696181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer unary_function < 1706181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Pair, 1716181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename 1726181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Pair::first_type > { 1736181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 1746181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 1756181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer# 1 "f.h" 3 1766181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerusing 1776181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerstd::pair; 1786181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace 1796181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer__gnu_cxx { 1806181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1816181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class > struct hash; 1826181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 1836181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class, 1846181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class, 1856181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class, 1866181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class, 1876181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 1886181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _EqualKey, 1896181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class > 1906181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 1916181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer hashtable { 1926181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer public: 1936181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef _EqualKey 1946181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer key_equal; 195c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith typedef void key_type; 1966181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 1976181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer using 1986181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer std::equal_to; 1996181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer using 2006181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer std::allocator; 2016181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer using 2026181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer std::_Select1st; 2036181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < class _Key, class _Tp, class _HashFn = 2046181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer hash < _Key >, class _EqualKey = equal_to < _Key >, class _Alloc = 2056181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer allocator < _Tp > >class hash_map { 2066181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef 2076181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer hashtable < 2086181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer pair < 2096181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Key, 2106181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Tp >, 2116181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Key, 2126181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _HashFn, 2136181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Select1st < 2146181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer pair < 2156181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Key, 2166181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Tp > >, 2176181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _EqualKey, 2186181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Alloc > 2196181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Ht; 2206181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer public: 221c7f811638f8603fa373d2be724e8b1c8ba51ad75Richard Smith typedef typename _Ht::key_type key_type; 2226181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef typename 2236181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer _Ht::key_equal 2246181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer key_equal; 2256181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2266181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 2276181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerusing 2286181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer__gnu_cxx::hash_map; 2296181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerclass 2306181e56a44ecc31dfca8baea2ae8738957003496Benjamin KramerC2; 2316181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < class > class scoped_ptr { 2326181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 2336181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace { 2346181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerclass 2356181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer AAA { 2366181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer virtual ~ 2376181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer AAA () { 2386181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }}; 2396181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 2406181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename > class EEE; 2416181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertemplate < typename CCC, typename = 2426181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramertypename CCC::key_equal, typename = 2436181e56a44ecc31dfca8baea2ae8738957003496Benjamin KramerEEE < CCC > >class III { 2446181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer}; 2456181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace 2466181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerutil { 2476181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2486181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer EEE { 2496181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2506181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 2516181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace { 2526181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramerclass 2536181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C1: 2546181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer util::EEE { 2556181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer public: 2566181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2576181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C3: 2586181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer AAA { 2596181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer struct FFF; 2606181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typedef 2616181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer III < 2626181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer hash_map < 2636181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C2, 2646181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer FFF > > 2656181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer GGG; 2666181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer GGG 2676181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer aaa; 2686181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer friend 2696181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C1; 2706181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2716181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer void 2726181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer HHH (C3::GGG &); 2736181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2746181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 2756181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramernamespace 2766181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramern1 { 2776181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2786181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer Test { 2796181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2806181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer template < 2816181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer typename > 2826181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2836181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C7 { 2846181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2856181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2866181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C4: 2876181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer n1::Test { 2886181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer vector < 2896181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C1::C3 * > 2906181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer a1; 2916181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2926181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer enum C5 { }; 2936181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 2946181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C6: 2956181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C4, 2966181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer n1::C7 < 2976181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C5 > { 2986181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 2996181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 3006181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C8: 3016181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C6 { 3026181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 3036181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer class 3046181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C9: 3056181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C8 { 3066181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer void 3076181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer TestBody (); 3086181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer }; 3096181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer void 3106181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer C9::TestBody () { 3116181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer scoped_ptr < C1::C3 > context; 3126181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer } 3136181e56a44ecc31dfca8baea2ae8738957003496Benjamin Kramer} 314