// PR ipa/63587 // { dg-do compile { target c++11 } } // { dg-options "-O2" } // { dg-additional-options "-Wno-return-type" } namespace boost { class basic_cstring { public: basic_cstring (char *); }; template struct identity { }; struct make_identity; struct function_buffer { }; template struct function_obj_invoker0 { static int invoke (function_buffer &) { FunctionObj f; f (); return 0; } }; template struct get_function_obj_invoker0 { typedef function_obj_invoker0 type; }; template struct apply { typedef typename get_function_obj_invoker0::type invoker_type; }; struct basic_vtable0 { typedef int (*invoker_type)(function_buffer &); template void assign_to (F, function_buffer); invoker_type invoker; }; class function0 { public: template function0 (Functor) { typedef typename apply::invoker_type invoker_type; basic_vtable0 stored_vtable { invoker_type::invoke }; stored_vtable.assign_to (0, functor); } function_buffer functor; }; class function : function0 { public: template function (Functor f) : function0 (f) {} }; class test_unit_generator { }; class test_case { public: test_case (basic_cstring, basic_cstring, int, function); }; struct auto_test_unit_registrar { auto_test_unit_registrar (test_unit_generator); }; template F unwrap (F, int); struct for_each_impl { template static void execute (Iterator, LastIterator, TransformFunc, F f) { identity __trans_tmp_1; unwrap (f, 0)(__trans_tmp_1); } }; template void for_each (F f) { for_each_impl::execute (0, 0, 0, f); } template class test_case_template_invoker { public: void operator()() { TestCaseTemplate::run (0); } }; template struct generate_test_case_4_type { generate_test_case_4_type (basic_cstring, basic_cstring, int, Generator G) : m_test_case_name (0), m_test_case_file (0), m_holder (G) { } template void operator()(identity) { test_case (0, 0, 0, test_case_template_invoker ()); } basic_cstring m_test_case_name; basic_cstring m_test_case_file; Generator m_holder; }; template class template_test_case_gen : public test_unit_generator { public: template_test_case_gen (basic_cstring, basic_cstring, int) { for_each ( generate_test_case_4_type ( 0, 0, 0, *this)); } }; class attribute_name { int m_id; public: attribute_name (char); }; template struct term; namespace exprns_ { template struct expr; } using exprns_::expr; template struct Trans_NS_proto_terminal { typedef expr > type; }; namespace exprns_ { template struct expr > { Arg0 child0; }; } template struct actor { typename Trans_NS_proto_terminal::type proto_expr_; }; template