#include <concepts>
template< typename T >
concept cloneable = requires( T x )
{
{ x.clone() } -> std::convertible_to<T*>;
};
template< cloneable T >
struct OnlyCloneable {};
struct Foo
{
Foo* clone() const { return new Foo(*this); }
//using Ptr1 = OnlyCloneable<Foo>; // если раскомментарить, то ошибка компиляции
};
using Ptr2 = OnlyCloneable<Foo>;
static_assert( cloneable<Foo> );
int main()
{
return 0;
}
Вопрос -- это как-то лечится?
Почему проваливается проверка концепта внутри типа, хотя наличие метода clone компилятору уже известно?