constexpr (sizeof (T)): зачем указывать constexpr на sizeof? - PullRequest
4 голосов
/ 16 июня 2020

Сегодня кто-то попросил меня помочь сделать проект 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, поэтому я прихожу к выводу, что это действительно была причуда, но даже тогда у кого-то должна была быть причина написать такой код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...