overloading fonctions template

a marqué ce sujet comme résolu.

Le code ne fonctionne que sur gcc

template <auto = []{}>
consteval auto f() { return false; }

template <typename ...Args>
consteval auto f(Args &&...) { return true; }


template <typename T>
void func1() {
    static_assert(f() == false); // fails
}

void func2() {
    static_assert(f() == false);
}

Pourquoi le premier overload de f() n’est jamais considere dans un contexte avec template (fonctions/structs/variables/etc templated) ?

+0 -0

En testant un peu:

  • Clang 10 et 11 donnent une erreur pour func1 et func2
  • Clang 12 ne donne pas d’erreur
  • gcc >=10 donnent une erreur pour func1 uniquement

En regardant les règles de Function template overloading, je ne vois rien qui indique que les règles de résolution pourraient être différente pour l’appel à f entre func1 et func2. À partir de là, je dirais que gcc a probablement un bug.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte