2016-04-03 4 views
3

Я получаю ошибку компилятора Clang 3.8 и GCC 5.3, если я хочу объявить мои конструкторы по умолчанию default как constexpr. По this StackOverflow вопрос он просто должен работать нормально:constexpr default default constructors

struct A 
{ 
    constexpr A() = default; 

    int x; 
}; 

однако:

Error: defaulted definition of default constructor is not constexpr 

Есть ли у Вас какие-либо понятия, что на самом деле происходит?

ответ

6

Как бы то ни было, x остается неинициализированным, поэтому объект не может быть создан во время компиляции.

Вы должны инициализировать х:

struct A 
{ 
    constexpr A() = default; 

    int x = 1; 
}; 
+0

Да я понял это в то же время. Этот ссылочный вопрос/ответ SO довольно неполный и вводящий в заблуждение. – plasmacel

+0

@plasmacel принятый ответ покрывает требуемую информацию ... выделен жирным шрифтом ближе к концу, и объясняет, что если вы не пишете 'constexpr', то функция constexpr тогда и только тогда, когда она соответствует критериям для constexpr; а затем в последнем абзаце объясняется, что если вы можете написать 'constexpr' самостоятельно, если вы хотите получить ошибку компиляции, когда ваша функция не соответствовала критериям (так как ваша не делает) –