llvm/llvm-project

[clang] Poor diagnostic with wrong template argument type

Open

#121 235 ouverte le 27 déc. 2024

Voir sur GitHub
 (7 commentaires) (0 réactions) (1 assigné)C++ (10 782 forks)batch import
clang:diagnosticsconfirmedenhancementgood first issue

Métriques du dépôt

Stars
 (26 378 stars)
Métriques de merge PR
 (Merge moyen 1j 2h) (1 000 PRs mergées en 30 j)

Description

Clang diagnostic for invalid bool-to-enum template parameter conversion lacks failure detail when compared to GCC, as the following C++ snippet:

enum endianness { little = 0, big };

template <endianness e>
inline void foo() {}

void bar() {
    foo<false>();
}

Fails as follows on latest clang:

<source>:7:5: error: no matching function for call to 'foo'
    7 |     foo<false>();
      |     ^~~~~~~~~~
<source>:4:13: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'big_endian'
    4 | inline void foo() {}

GCC explicitly indicates the conversion failure instead:

<source>:4:13: note: template argument deduction/substitution failed:
<source>:7:15: error: could not convert 'false' from 'bool' to 'endianness'
    7 |     foo<false>();
      |     ~~~~~~~~~~^~
      |               |
      |               bool

Godbolt: https://godbolt.org/z/hnazTn3M7 (cc/ @shafik).

Guide contributeur