Как проверить конструктивность без ложноположительных или ложноотрицательных результатов?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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