Я попытался объявить шаблон переменной constexpr
следующим образом:
template<typename>
constexpr std::size_t iterator_category_value;
Цель состояла в том, чтобы задокументировать, что каждая специализация должна быть constexpr
, но я должен признать, что я никогда не проверял, является ли она законной или нет, и g++ был доволен этим. Однако, когда я попытался скомпилировать эту сеть с помощью clang++, я получил следующую ошибку:
error: default initialization of an object of const type 'const std::size_t' (aka 'const unsigned long') constexpr std::size_t iterator_category_value; ^ = 0
Ошибка имеет смысл, и удаление constexpr
приводит к ее исчезновению, так что это не проблема. Однако теперь мне любопытно: разрешает ли стандарт такое constexpr
предварительное объявление для шаблона переменной или это незаконно? g++ и clang++, кажется, не согласны, и я хотел бы знать, куда я должен отправить отчет об ошибке, если это необходимо.
Оба они жалуются на предварительно объявленную переменную constepxr
, которая не является шаблоном переменной, поэтому контекст шаблона переменной, похоже, вызывает разногласия между компиляторами.
constexpr
, однако я не совсем уверен, как стандарт запрещает это. Шаблон переменной не похож на объявление объекта для меня. - person dyp   schedule 18.10.2015constexpr
требует инициализации) - person dyp   schedule 18.10.2015