Bonjour à tous,

Le code suivant ne compile pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
struct A
{
    static constexpr int a = 42;
};
 
int main()
{
    return std::min(A::a, 12);
}
Avec l’erreur suivante :
undefined reference to `A::a'
Bon, de ce que je comprends, c’est lié au passage par référence constante.

Toutefois, je ne comprends pas (note : ce n’est pas lié au constexpr, ça fait pareil avec un const simple). Je pensais qu’il était parfaitement valide d’initialiser les variables statiques de type int dans la classe. Or, je constate que oui, c’est valide, mais que la variable est déclarée, a une valeur, mais pas d’adresse .

Le comportement est le même avec gcc et clang, ce qui incite à penser que c’est normal. Pourtant, je ne peux pas m’empêcher de trouver ça particulièrement tordu.

D’autres avis / explications ?