在派生的模板函数的本地类中进行变量查找

时间:2015-06-16 21:17:35

标签: c++ templates local-class

我正在尝试使用C ++中的本地类,并坚持使用以下代码:

void f1(int a)
{
    struct Inner1
    {
        int a;
    };

    struct Inner2 : Inner1
    {
        void foo()
        {
            a = 10; // Okay
        }
    };
};

template<typename T>
void f2(T a)
{
    struct Inner1
    {
        T a;
    };

    struct Inner2 : Inner1
    {
        void foo()
        {
            a = T(10); // error: use of parameter from containing function
        }
    };
};

template<typename T>
void f3(T a)
{
    struct Inner
    {
        T a;

        void foo()
        {
            a = T(10); // Okay
        }
    };
};

int main()
{
    f1(10);
    f2(10);
    f3(10);
    return 0;
}

为什么会这样?我是对的,这是一个编译器错误(我使用的是gcc 4.8.4和gcc 4.9.2)并且代码是正确的吗?

0 个答案:

没有答案