Clang发出一个"未使用的类型别名"警告所使用的类型别名

时间:2018-05-06 22:55:44

标签: c++ clang clang++ llvm-clang type-alias

我有一些Clang正在生成警告的代码。这从实际代码中简化,但精神是相同的。本地类中的this_t用于实例化其他一些模板类。

template<class T>
struct value_holder
{
    T  value;
};

template<class T>
int get_value()
{
    struct value_t
    {
        using this_t = value_t;
        //    ^ here
        static value_holder<this_t> val()
        {
            return value_holder<this_t>();
        }

        operator int()
        { return 0; }
    };
    return value_t::val().value;
}

int main(int argc, char** argv) {
    return get_value<void>();
}

使用-std=c++1z -Wall编译时,Clang警告unused type alias

main.cpp:14:15: warning: unused type alias 'this_t' [-Wunused-local-typedef]
        using this_t = value_t;
              ^
1 warning generated.

你可以在godbolt(6.0trunk)上看到错误,在本地我可以使用Clang 7报告相同的事情。

仅当本地类嵌套在模板函数或模板类的方法中时,才会出现此警告。当类嵌套在具体的类或函数中时,没有警告。

Clang在这里发出此警告是否正确? this_t类型用于value_t::val()的返回类型。

1 个答案:

答案 0 :(得分:4)

看起来这是Clang(2488333298)中的一个错误,2015年首次针对Clang 3.7报告。我在Godbolt尝试过它似乎发生在3.6。