The following will compile with GCC 5.2 but not with Visual Studio 2015.
template
struct CRTP {
static constexpr int num = Deriv
Try making it a constexpr function instead. The way you have it setup now attempts to access an incomplete type.
Since a templated member function will only be initialized upon first being used, type A
will be fully defined by that point.
#include
template
struct CRTP {
static constexpr int num() { return Derived::value + 1; }
};
struct A : CRTP {
static constexpr int value = 5;
};
int main()
{
std::cout << A::num();
return 0;
}
See it live here