У меня возникают некоторые трудности с атрибутами static constexpr
: он работает со встроенными типами, с enum class
членами, но когда я пытаюсь сделать это со статически инициализированным интегральным массивом, он не работает при linking undefined reference to S::a
внутри main
.C++ 14 статический массив элементов constexpr не работает при связывании
То есть с clang 3.9 или g ++ 6.3 и ld 2.27.90; и все это с -std=c++14
.
Вот самый быстрый сниппет воспроизвести это:
struct S
{
static constexpr int a[5] = {0};
};
int main()
{
S s{};
[[gnu::unused]] int b = s.a[0]; // force S stuff to be emitted
return 0;
}
Спасибо за любые предложения, вы можете иметь для этой ситуации.
Необходимо определить ваш объект; в области пространства имен: 'constexpr int S :: a [5];' – ildjarn
@ildjarn спасибо! но знаете ли вы, почему я должен делать это для массивов, но не для других вещей, таких как простые интегральные типы? – suut