Несоответствие с decltype в статической функции-члене ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Несоответствие с decltype в статической функции-члене

Сообщение Anonymous »

Clang отклоняет следующий код:

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

#include 

struct k { static void f(); };
// clang nope, gcc ok, msvc ok
static_assert(std::same_as);
Похоже, что это сводится к тому, следует ли проверять decltype(k{}.f) либо как тип void(), либо как тип void (&)( ) или даже введите void (&&)(). При заключении скобок k{}.f (т. е.: decltype((k{}.f))) и Clang, и GCC согласовывают тип void (&)(), а MSVC рассматривает выражение как тип void (&&)(). Кажется, это говорит о том, что и GCC, и MSVC не рассматривают проверку типа простого k{}.f как выражение lvalue.
Я предполагаю, что не существует специального исключение с decltype при проверке статических функций-членов в форме k{}.f. Следовательно, означает ли это, что и GCC, и MSVC несовместимы?
Демо

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-function

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