Сегодня кто-то попросил меня помочь сделать проект VC ++, скомпилированный с G ++, и я наткнулся на эту строку:
static char data[constexpr(sizeof(T))];
(конечно, это было внутри функции шаблона с параметром шаблона с именем T
).
У меня нет стандарта C ++, но согласно cppreference :
Синтаксис
sizeof (type) (1)
sizeof expression (2)
Обе версии являются константными выражениями типа std :: size_t.
Итак, какой смысл сообщать VC ++, что sizeof()
ожидается constexpr
?
Попробуйте: https://rextester.com/VIWP36674.
Работает на V C, но не работает для G ++, как и ожидалось.
Другой вариант: https://godbolt.org/z/DnioLS
Работает на V C до 19.10. Кажется, что это исправлено в 19.14, поэтому я прихожу к выводу, что это действительно была причуда, но даже тогда у кого-то должна была быть причина написать такой код ...