Как проверить конструктивность без ложноположительных или ложноотрицательных результатов?C++

Программы на C++. Форум разработчиков
Anonymous
Как проверить конструктивность без ложноположительных или ложноотрицательных результатов?

Сообщение Anonymous »

Я пытаюсь проверить, можно ли создать объект типа T с аргументом типа U.
Вы могли бы подумать, что std: :is_constructible был бы достаточно близок (кроме того факта, что он также проверяет разрушаемость, чего в идеале мне бы хотелось избежать), но, видимо, это не удается:

Код: Выделить всё

#include 
using U = int;
enum T : U { };
static_assert(std::is_constructible::value, "error");  // fails
static_assert(std::is_convertible::value, "error");  // fails
Я полагаю, что это имеет смысл, поскольку T e((U())) не работает, но это не то, что я ищу, потому что auto v = T(U()) и auto v = static_cast(U()) оба успешны.
Это также заставляет меня задаться вопросом, что другие крайние случаи, которые я, возможно, пропустил... Понятия не имею.
Как правильно проверять исключительно конструктивность с помощью Синтаксис T(...), в идеале с использованием стандартных признаков и с как можно меньшим количеством ложноположительных или ложноотрицательных результатов?

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

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