Соответствует ли эта простая методика SFINAE с использованием членов?C++

Программы на C++. Форум разработчиков
Anonymous
Соответствует ли эта простая методика SFINAE с использованием членов?

Сообщение Anonymous »

Я использую простой (не особенно новый) метод для проверки существования члена класса с определенным именем и типом.
Следующий код нормально компилируется в Clang, но MSVC сообщает, что static_assert не удалось выполнить. .

template
struct SfinaeNonType
{
typedef void Type;
};

struct Member
{
};

template
struct HasMember
{
static const bool RESULT = false;
};

template
struct HasMember
{
static const bool RESULT = true;
};

struct A
{
Member member;
};

static_assert(HasMember::RESULT, ""); // msvc rejects


Есть ли в этом коде что-то несоответствующее требованиям или это просто ошибка в MSVC?

Если это ошибка, есть ли простой обходной путь?

Любопытно, что MSVC устраивает (в остальном идентичный код) проверку существования функции-члена, а не члена данных:

template
struct SfinaeNonType
{
typedef void Type;
};

struct Member
{
};

template
struct HasMember
{
static const bool RESULT = false;
};

template
struct HasMember
{
static const bool RESULT = true;
};

struct A
{
Member member();
};

static_assert(HasMember::RESULT, ""); // msvc accepts


Подробнее здесь: https://stackoverflow.com/questions/189 ... -compliant

Вернуться в «C++»