Не могу использовать std :: not_fn с непосредственными функциямиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Не могу использовать std :: not_fn с непосредственными функциями

Сообщение Anonymous »

Я пытаюсь применить std :: not_fn обертка к непосредственному постоянному function.
Но даже самый простой C ++ 20 Пример

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

#include 

consteval bool f() { return false; }

// ok in GCC and Clang, error in MSVC
static_assert( std::not_fn(f)() );
работает нормально в GCC/Clang, но не сбои в Visual Studio с ошибкой:

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

error C7596: 'f': cannot take address of immediate function outside of an immediate invocation
В C ++ 26 мы получим std :: not_fn с статически определенной вызовой целью. В настоящее время он реализован только в LIBC ++ от Clang. Но пример < /p>

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

static_assert( std::not_fn()() );
< /code>
Сбой со следующей ошибкой в ​​Clang: < /p>
error: no matching function for call to 'not_fn'
note: candidate template ignored: invalid explicitly-specified argument for template
онлайн демо: https://gcc.godbolt.org/z/dkofrdhb8
Все ошибки разрешаются, если объявить функцию f как constexpr вместо constoval . перегрузки) быть совместимы с непосредственными функциями?

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

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

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

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

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

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