MSVC: Modifikatoren sind für Nicht-Member-Funktionen nicht zulässig

8

Ich habe eine Signal / Slot-Bibliothek geschrieben ( CodeProject-Artikel hier ) ), unter Linux, kompilierend mit Clang 3.5 und GCC4.9. Es kompiliert ohne Warnungen auf beiden Compilern (auch auf Version 3.4 bzw. 4.8). Als ich alles funktionierte und den Artikel online veröffentlichte, dauerte es nicht lange, bis ich Beschwerden bekam, dass es nicht auf MSVC funktioniert. (Visual Studio Express 2013? Tut mir leid, ich kenne das Versionssystem nicht.) Ich habe es in einer VM installiert, um nach mir selbst zu suchen, und habe festgestellt, dass es Folgendes nicht kompiliert:

%Vor%

Der Grund dafür ist, dass R(Args ...) keine Memberfunktion ist und daher kein const Qualifikationsmerkmal haben kann.

Obwohl es natürlich richtig ist, dass es keinen Sinn macht, einen const Qualifier für eine Nichtmitgliedsfunktion zu haben, glaube ich, dass ich irgendwo gelesen habe (hier auf SO, einschließlich eines Zitats aus dem Standard), dass es ist zulässig, solange es nicht an eine tatsächliche Funktion gebunden ist. I.e. it ist als eigenständiger Typ zulässig. Leider kann ich den Thread nicht mehr finden ...

Ich habe mich gerade gefragt, wer bei dieser Gelegenheit recht hat: MSVC oder GCC + Clang und was der Standard zu einer eigenständigen Funktionssignatur wie void() const sagt.

    
JorenHeit 22.01.2015, 10:30
quelle

1 Antwort

5

Nun, ich glaube, es scheint, dass Sie (und GCC und Clang) im Hinblick auf das, was der Standard sagt, Recht haben. Aus §8.3.5 / 6 (in N3376), (Hervorhebung von mir):

  

Ein cv-Qualifier-seq oder ein Ref-Qualifier darf nur ein Teil von:

sein      

- der Funktionstyp für eine nicht statische Elementfunktion,

     

- der Funktionstyp, auf den sich ein Zeiger auf Member bezieht,

     

- der Funktionstyp auf oberster Ebene einer Funktion typedef-Deklaration oder Alias-Deklaration,

     

- Die Typ-ID im Standardargument eines Typparameters (14.1) oder

     

- die Typ-ID eines Template-Arguments für einen Typparameter (14.2).

    
JBL 22.01.2015, 11:28
quelle

Tags und Links