#include #include #include template struct foo { }; template struct DummyConcept { typedef typename X::something something; BOOST_CONCEPT_USAGE(DummyConcept){ } }; template BOOST_CONCEPT_REQUIRES( ((DummyConcept)), (void)) func(T&) { std::cout << "first overload" << std::endl; } template void func(foo) { std::cout << "second overload" << std::endl; } int main() { func(foo()); return 0; }