我有一些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.0,trunk)上看到错误,在本地我可以使用Clang 7报告相同的事情。
仅当本地类嵌套在模板函数或模板类的方法中时,才会出现此警告。当类嵌套在具体的类或函数中时,没有警告。
Clang在这里发出此警告是否正确? this_t
类型用于value_t::val()
的返回类型。