Инициализация статического члена в классе

Дано

struct X {};

constexpr auto x = X{};

struct S {
    static constexpr auto& rx = x;  
};

gcc 4.8 говорит

ошибка: непостоянная инициализация в классе недействительна для статического члена 'S::rx'

static constexpr auto& rx = x;  
                            ^

ошибка: (требуется инициализация вне класса)

ошибка: 'S::rx' не может быть инициализирован непостоянным выражением при объявлении

Я ожидаю, что x будет константным выражением, подходящим для такой инициализации. Это ошибка gcc? Если нет, то что здесь происходит?


person yuri kilochek    schedule 09.02.2014    source источник
comment
Любопытно, что если исключить constexpr из определения x, то он скомпилируется.   -  person Igor Tandetnik    schedule 09.02.2014
comment
clang++3.5 принимает его.   -  person dyp    schedule 09.02.2014
comment
Пожалуйста, сообщите об ошибке, спасибо   -  person Jonathan Wakely    schedule 09.02.2014


Ответы (2)


Это ошибка, о которой уже сообщалось.

person yuri kilochek    schedule 09.02.2014

Вместо этого вы можете сделать следующее:

struct X {};

const auto x = X{};

struct S {
    static constexpr auto& rx = x;  
};
person Nipun Talukdar    schedule 09.02.2014