decltype для объявления переменной-члена работает только в классах, не являющихся шаблонами?

Я обнаружил некоторое странное поведение. Это соответствует стандарту С++ или это ошибка компилятора Microsoft? Я использую MSVC 2013 Update 4 (набор инструментов v120).

Это работает:

#include <deque>

class Test
{
    std::deque<int> _items;
    decltype(_items)::iterator _currentItem;
};

int main()
{
    Test test;

    return 0;
}

И это не скомпилируется:

#include <deque>

template <typename T>
class Test
{
    std::deque<int> _items;
    decltype(_items)::iterator _currentItem;
};

int main()
{
    Test<int> test;

    return 0;
}

Ошибки:

1> Source.cpp(7): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором '_currentItem'
1> Source.cpp(8): см. ссылку на компилируемый экземпляр шаблона класса 'Test' 1>Source.cpp(7): ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает default-int.


person Violet Giraffe    schedule 18.06.2016    source источник
comment
Я подозреваю, что источник проблемы тот же, что и у это.   -  person LogicStuff    schedule 18.06.2016