Как проверить во время компиляции, если может быть оценена постоянная функция?C++

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

Сообщение Anonymous »

Я пишу функцию, которая для цели этого вопроса похожа на std :: format , в этом std :: format ("{}") не удастся при сборе, в то время как std :: format ("{}", 1) Компонент. std :: format ("{}") ; Вместо этого я хочу, чтобы это была ошибка во время компиляции, и это текущее поведение. < /p>
Как я могу обеспечить это поведение не регрессирует?

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

#include 

template
concept FormatMissingArgumentCompiles = requires { std::format("{}"); };

// This check incorrectly states that 'Format missing argument compiles'
static_assert(!FormatMissingArgumentCompiles, "Format missing argument compiles");

int main() {}
Однако кажется, что std :: format ("{}") является хорошо сформированным выражением , если не оценивается и требует не оценивает свои аргументы (https://en.cppreference.com/w/cpp/langu ... xpressions).образно Construction of std :: format ("{}") плохо сформирована?

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

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