Если 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

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