Clang выдает предупреждение «неиспользуемый псевдоним типа» для используемого псевдонима типа - PullRequest
0 голосов
/ 07 мая 2018

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

1 Ответ

0 голосов
/ 07 мая 2018

Похоже, что это ошибка в Clang ( 24883 , 33298 ), впервые сообщенная в 2015 году против Clang 3.7. Я попытался в Godbolt, и это, кажется, происходит еще в 3.6.

...