Если Constexpr Discorded Branch не может компилировать при условном вызове конструктораC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Если Constexpr Discorded Branch не может компилировать при условном вызове конструктора

Сообщение Anonymous »

У меня есть класс, который в некоторых препроцессорных контекстах раскрывает дополнительный конструктор для отладки/тестирования:

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

struct s {
s(int) {}
#if defined(DEBUG) || (defined(UNIT_TEST) && !defined(UNIT_TEST_NO_DEBUG_FEATURES))
s(int, const char*) {};
#endif
};
< /code>
Затем в каком-то общем коде утилиты я выбираю один из них: < /p>
void test() {
#if defined(DEBUG) || (defined(UNIT_TEST) && !defined(UNIT_TEST_NO_DEBUG_FEATURES))
s{ 10, "test" };
#else
s{ 10 };
#endif
}
Поскольку условие препроцессора несколько сложнее, я хотел заменить его, если contexpr , используя признаки типа для запроса существования этого конструктора:
void test() {
if constexpr(std::is_constructible_v) {
s{ 10, "test" };
} else {
s{ 10 };
}
}
< /code>
Запустите его на Godbolt. Есть ли другой способ достичь этого? Я попытался ввести какой -то фальшивый шаблон шаблона.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... uctor-call
Ответить

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

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

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

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

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