Un membre est défini commeinitialisation shared_ptr
std::shared_ptr<std::array<std::string, 6> > exit_to;
qui pointe vers des données supplémentaires partagés entre autres. Lorsque vous essayez d'initialiser le pointeur "exit_to". La manière correcte est
node_knot.exit_to = std::make_shared<std::array<std::string, 6> >();
Mais il est dans un autre dossier et je voudrais garder le type de pointeur cohérent, quelque chose comme ceci:
node_knot.exit_to = std::make_shared<decltype(*node_knot.exit_to)>();
Mais ne compilera pas:
/usr/include/c++/4.6/bits/shared_ptr_base.h:798:54: error: '__p'
declared as a pointer to a reference of type
'std::array<std::basic_string<char>, 6> &'
__shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, _Tp* __p)
^/usr/include/c++/4.6/bits/shared_ptr.h:93:31: note: in instantiation
of template class
'std::__shared_ptr<std::array<std::basic_string<char>, 6> &, 1>'
requested here
class shared_ptr : public __shared_ptr<_Tp>
^../node_booker.h:757:20: note: in
instantiation of template class
'std::shared_ptr<std::array<std::basic_string<char>, 6> &>' requested
here
n.exit_to = std::make_shared<decltype(*n.exit_to)>();
Je suis sous Ubuntu 12.10, clang ++ 3.2, avec --std = C++ 11
Great! Je vais voir si remove_reference fait l'affaire! –