Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/08/2015, à 15:41

louis94

constexpr en C++, comparaison d'un pointeur avec nullptr

Bonjour,

Je voudrais écrire (en C++) le code suivant:

constexpr bool x = (("string" + 1) == nullptr);
constexpr bool y = ("string" == nullptr);

Clang (3.6.2) l'accepte sans problème ni avertissement ; GCC (5.2.0) prétend que x n'est pas initialisé par une expression constante (alors qu'il veut bien de y). Ma question est donc : qui a raison ? Cette page me semble donner raison à Clang, sauf si nullptr_t est défini comme void* (encore que, la conversion est ici implicite, pas de cast). De toute manière, std::is_same me dit que les deux sont différents.

Louis

PS: Je veux évaluer x pour pouvoir faire quelque chose de ce genre :

constexpr bool isalnum(char c); // Pas en conflit avec isalnum de libc parce que dans un namespace
constexpr bool isalnum(const char *str)
{
    return str != nullptr && (*str == 0 || (isalnum(*str) && isalnum(str + 1)));
}
constexpr bool isidentifier(const char *str)
{
    return str != nullptr && *str == '$' && isalnum(str + 1); // isalnum(str + 1) n'est pas constant pour GCC
}
constexpr bool vrai = isidentifier("$var");

Je vais de toute façon modifier mon code pour que ça compile.

Hors ligne