Вероятно, туплю, но не могу понять, в чем дело.
Следующий код без проблем компилируется:
#include <forward_list>
template<typename T>
class Foo
{
std::_Fwd_list_const_iterator<T> cur;
//...
};
А вот следующий выдает ошибку:
#include <forward_list>
template<typename T>
class Foo
{
std::forward_list<T>::const_iterator cur;
//...
};
$ g++ -c -std=c++11 1.cpp
1.cpp:5:5: error: need ‘typename’ before ‘std::forward_list<T>::const_iterator’ because ‘std::forward_list<T>’ is a dependent scope
std::forward_list<T>::const_iterator cur;
^
$ clang++ -c -std=c++11 1.cpp
1.cpp:5:5: error: missing 'typename' prior to dependent type name 'std::forward_list<T>::const_iterator'
std::forward_list<T>::const_iterator cur;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typename
1 error generated.
Fwd_list_const_iterator определен в libstdc++ вот так: (см
https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++...typedef _Fwd_list_const_iterator<_Tp> const_iterator;
Есть идеи?