Compiling с VS2015:constexpr ошибка, станд :: is_same с множественным наследованием
template <typename Owner, typename C, typename R, typename... Args>
constexpr bool FunctionBelongsTo(R(C::*)(Args...) const)
{
return std::is_same<C, Owner>::value;
}
class C
{
public:
int x;
};
class D
{
public:
int y;
};
class M : public C, public D
{
public:
void f() const {}
};
static_assert(FunctionBelongsTo<M>(&M::f) != true, "TRUE");
constexpr
функция выдает странную ошибку:
error C2131: expression did not evaluate to a constant
note: a non-constant (sub-)expression was encountered
std::is_same
Это выражение является безусловно постоянной.
Странная вещь, эта ошибка, кажется, вызывается в этом конкретном случае, когда M
многократно унаследовано. Удалите один из базовых классов с M
и он просто компилируется (т. Е. Он испускает static_assert
, как и ожидалось), но когда M
многократно унаследовано, он решает, что выражение не является постоянным.
... что дает? Ошибка новичков?
Ваш код является законным, эта злокачественность приписывается визуальной студии, так как до сих пор только частично поддерживается поддержка нескольких типов персонажей. – 101010
как gcc, так и clang компилируют код – bolov
Я думаю, что возится VS - это указатель метода. Он не оценивает его как постоянную времени компиляции. – bolov