2016-06-01 21 views
5

codice di errore è C2131.statico constexpr char m_pszFoo [] = "*** FOO ***" ha errore di compilazione espressione non valutata costante

intelisense non si lamenta anche quando chiamo size su questa variabile in altri file intelisense conosce la dimensione. cosa mi manca per farlo funzionare? Qualsiasi aiuto è molto apprezzato. Nella foto qui sotto vedi intelisense non lamentarsi e anche determinare le dimensioni.

enter image description here

esempio a.h:

class a 
{ 
private: 
static constexpr char m_pszFoo[] = "***FOO***"; // compile error on this line C2131 expression did not evaluate to a constant 

public: 
a() { sizeof(m_pszFoo); }; // no compile error here 
}; 

per riprodurre tutto quello che dovete fare è includere a.h in qualsiasi altro file. Non si riprodurrà senza l'inclusione.

+0

@NathanOliver verrified l'esempio di cui sopra in msvc 2015 14.0.24720.00 aggiornamento 1 – user1881587

+0

posso confermare che non viene compilato in MSVS. Sia clang che gcc compilano. – NathanOliver

+0

provare a creare il costruttore 'constexpr' –

risposta

4

Così mi si avvicinò con un lavoro in giro b \ c quel messaggio di errore sembrava che avevo bisogno di aggiungere un const qualche

static constexpr char const m_pszFoo[] = "**FOO***"; 

per qualche motivo se diciamo al compilatore che non dovremmo essere in grado per cambiare il char a cui la stringa punta msvc è felice.

* Edit *

ho avuto alcuni suggerimenti per aprire un bug con Microsoft e far loro indagare come questo sembra essere un bug di interoperabilità con msvc. ecco il link connect.microsoft: https://connect.microsoft.com/VisualStudio/feedback/details/2781048

Problemi correlati