/** * This program checks if the compiler doesn't have a certain bug * that we encountered when testing C++11 features */ #include "test_config.h" #include #include namespace FOO { template class o_r; template struct o_t { using ref_type = o_r; }; class T_base {}; template::value>::type, typename ...Args> o_r make_f(Args&& ...args); template class o_r final { public: template friend o_r<_Tp1> make_f(Args&& ...args); protected: using shared_ptr_type = std::shared_ptr; template::value>::type> explicit o_r (_Tp1*) : stub_ () {} private: shared_ptr_type stub_; }; template inline o_r make_f(Args&& ...args) { return o_r (new T (std::forward (args)...)); } class A : public T_base { protected: A () = default; template friend o_r<_Tp1> make_f(Args&& ...args); }; o_t::ref_type create () { return make_f(); } class B {}; } int run_main (int, ACE_TCHAR *[]) { ACE_START_TEST (ACE_TEXT("Compiler_Features_24_Test")); FOO::o_r l = FOO::create(); FOO::o_r l2 = FOO::make_f(); // next line doesn't compile and shouldn't //FOO::o_r l3 = FOO::make_f(); ACE_DEBUG ((LM_INFO, ACE_TEXT ("Compiler Feature 24 Test does compile and run.\n"))); ACE_END_TEST; return 0; }