// http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2014 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #define BOOST_AUTO_TEST_MAIN #include #include namespace limitations_template_method_problem { //[ limitations_template_method_problem class concept { public: template void method(T t) {} }; template void function_under_test(T t) // T is supposed to model the previous concept { t.method(42); t.method("string"); } //] //[ limitations_template_method_solution MOCK_CLASS(mock_concept) { MOCK_METHOD(method, 1, void(int), method_int) MOCK_METHOD(method, 1, void(const char*), method_string) }; //] } // namespace limitations_template_method_problem namespace limitations_template_method_problem_2 { //[ limitations_template_method_problem_2 class concept { public: template T create() { return T(); } }; template void function_under_test(T t) // T is supposed to model the previous concept { t.template create(); t.template create(); } //] //[ limitations_template_method_solution_2 MOCK_CLASS(mock_concept) { template T create(); MOCK_METHOD(create_int, 0, int(), create_int) MOCK_METHOD(create_string, 0, std::string(), create_string) }; template<> int mock_concept::create() { return create_int(); } template<> std::string mock_concept::create() { return create_string(); } //] } // namespace limitations_template_method_problem_2