У меня есть код, для которого 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()
.