5

Ist es möglich, eine using Deklaration für den Literal Operator, operator "" zu haben?`using` Deklaration für einen benutzerdefinierten literalen Operator

ZB

#include <chrono> 

namespace MyNamespace 
{ 
    constexpr std::chrono::hours operator "" _hr(unsigned long long n){ 
    return std::chrono::hours{n}; 
    } 

    // ... other stuff in the namespace ... 
} 

using MyNamespace::operator""; // DOES NOT COMPILE! 

int main() 
{ 
    auto foo = 37_hr; 
} 

Meine Arbeit-around hat diese Operatoren in ihrer eigenen verschachtelten Namespace literals genannt zu setzen, die using namespace MyNamespace::literals; erlaubt, aber dies scheint etwas unelegant, und ich sehe nicht, warum die using Anweisung kann nicht für operator Funktionen auf die gleiche Weise wie für alle anderen Funktionen oder Typen innerhalb eines Namespace verwendet werden.

+2

'mit MyNamespace :: operator "" _ h;' –

+0

@PiotrSkotnicki Das, mein Freund, eine Antwort ist. (Eine richtige Antwort, sogar!) –

Antwort

6
using MyNamespace::operator""_hr; 
//       ^^^ 

DEMO

Grammar Referenz:

using-declaration: 
    using typename (opt) nested-name-specifier unqualified-id ; 
    using :: unqualified-id ; 

unqualified-id: 
    identifier 
    operator-function-id 
    conversion-function-id 
    literal-operator-id 
    ~ class-name 
    ~ decltype-specifier 
    template-id 

literal-operator-id: 
    operator string-literal identifier 
    operator user-defined-string-literal 
+0

Also 'user-defined-string-literal' ist das Syntaxelement, das" "_hr" entspricht? –

+0

@KyleStrand Ja, 'user-defined-string-literal' ist dasselbe wie' string-literal identifier', die '' '' '_' –

Verwandte Themen