#include concept ConstFoo { typename const_pointer = X::const_pointer ; const_pointer X::ptr() const ; // Does not compile const_pointer operator() ( X const& ) ; // Compiles } ; concept Foo : ConstFoo {} ; struct foo { typedef int* pointer ; typedef int const* const_pointer ; const_pointer ptr() const { return data_ ; } const_pointer operator() () const { return data_ ; } pointer data_ ; } ; concept_map Foo {} ; // Does not compile //concept_map ConstFoo {} ; // Compiles template void ff( X& x ) {} int main () { foo f ; ff( f ) ; return 0 ; }