Почему возникает ошибка локального типа

#include <iostream>
#include <vector>

int main()
{
    class Int {
        public:
            Int(int _i) : i(i) {}
        private:
            int i;
    };

    std::vector<Int> VI;
}

Я пытаюсь скомпилировать вышеуказанный код и получил следующее сообщение об ошибке:

foo.cc: In function 'int main()':
foo.cc:13: error: 'main()::Int' uses local type 'main()::Int'
foo.cc:13: error:   trying to instantiate 'template<class _Alloc> class std::allocator'
foo.cc:13: error: template argument 2 is invalid
foo.cc:13: error: invalid type in declaration before ';' token

Может ли кто-нибудь из вас рассказать мне, почему я не могу делать подобные вещи на С++? Спасибо заранее.

Ответы

Ответ 1

Стандарт явно запрещает использование локальных классов для создания шаблонов в 14.3.1 [temp.arg.type]/2.

Локальный тип, тип без привязки, неназванный тип или тип, составленный из любого из этих типов, не должны использоваться как шаблон-аргумент для параметра типа шаблона.

Это будет изменено в С++ 0x.