// Tはresult_typeを持っていなければならない、というコンセプト auto concept HasResultType<typename T> { typename result_type = T::result_type; } struct hoge { typedef int result_type; }; struct hage {}; template <HasResultType T> T::result_type foo() { } int main() { foo<hoge>(); foo<hage>(); // エラー! }