Este código compila:
#include <iostream>
class MyClass;
template<typename T>
concept HasFun = requires(T t)
{
{ t.fun() };
};
int main()
{
std::cout << HasFun<MyClass> << std::endl;
return 0;
}
sem erro e imprime 0
.
Quando
class MyClass;
é substituído por
class MyClass
{
public:
void fun();
};
ele imprime 1
;
Minha expectativa é que a compilação falhe (no primeiro caso) com um erro dizendo algo como "agregado 'MyClass' tem tipo incompleto".
Qual é o caso de uso em permitir que conceitos avaliem declarações de classe?