2016-12-26 6 views
-1

Рассмотрят следующий пример:Ошибка при инициализации зОго члена :: массива с брекет инициализатором в НКУ

#include <array> 

template <typename T> 
struct A { 
    A() {} 
}; 

typedef A<int> B; 

struct S { 
    std::array<B, 1> b; 

    S() : b{{B()}} {} 
}; 

int main() { 
    S s; 
} 

при попытке скомпилировать его с г ++ 4.6.3 и -std=c++0x я получаю эту ошибку:

test.cc: In constructor ‘S::S()’: 
test.cc:13:16: error: no matching function for call to ‘std::array<A<int>, 1ul>::array(<brace-enclosed initializer list>)’ 
test.cc:13:16: note: candidates are: 
/usr/include/c++/4.6/array:60:12: note: std::array<A<int>, 1ul>::array() 
/usr/include/c++/4.6/array:60:12: note: candidate expects 0 arguments, 1 provided 
/usr/include/c++/4.6/array:60:12: note: constexpr std::array<A<int>, 1ul>::array(const std::array<A<int>, 1ul>&) 
/usr/include/c++/4.6/array:60:12: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const std::array<A<int>, 1ul>&’ 
/usr/include/c++/4.6/array:60:12: note: constexpr std::array<A<int>, 1ul>::array(std::array<A<int>, 1ul>&&) 
/usr/include/c++/4.6/array:60:12: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::array<A<int>, 1ul>&&’ 

Однако та же инициализация распорка работает при определении переменной:

std::array<B, 1> b{{B()}}; 

ли я t, потому что эта конкретная версия gcc не полностью реализует C++ 11, или я что-то упускаю, а первый пример неверен?

ответ

1

Is it because this particular version of gcc doesn't fully implement C++11

Скорее всего, да. GCC 4.6 довольно устарел.

or am I missing something and the first example is not correct?

Что касается синтаксиса C++ 11, то ваш пример в порядке. Он компилируется по адресу colliru без ошибок или предупреждений.

 Смежные вопросы

  • Нет связанных вопросов^_^