##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# User-defined literals (since C++11)

From cppreference.com
< cpp‎ | language

| This section is incomplete

C++11 introduced the ability to add custom suffixes to literals in order to provide different values. Literal suffixes can be overloaded in a way very similar to operators.

### [edit] Syntax

decl return operator"" name ( unsigned long long n ) `{` body `}` |  |
decl return operator"" name ( long double d ) `{` body `}` |  |
decl return operator"" name ( const char* cstr ) `{` body `}` |  |
decl return operator"" name ( char_type c ) `{` body `}` |  |
decl return operator"" name ( const char_type * str, size_t sz ) `{` body `}` |  |
template <char...>decl return operator"" name ( )`{` body `}` |  |

### [edit] Explanation

char_type | - | one of char, char16_t, char32_t,wchar_t
decl | - | Declaration specifier sequence, can contain keywords as constexpr or inline
return | - | Return value
name | - | A valid C++ identifier, prefixed with an underscore. Identifiers without underscore are reserved for future use
n | - | Value resulting from an integral literal
d | - | Value resulting from a floating-point literal
c | - | Value resulting from a character literal
cstr | - | Null-terminated string as parsed by the compiler, for integer and floating point literals
str/sz | - | Buffer and size from a string literal
body | - | Function body

### [edit] Examples

Run this code

    #include <iostream>

    // used as conversion
    constexpr long double operator"" _deg ( long double deg )
    {
        return deg*3.141592/180;
    }

    // used with custom type
    struct mytype
    {
        mytype ( unsigned long long m):m(m){}
        unsigned long long m;
    };
    mytype operator"" _mytype ( unsigned long long n )
    {
        return mytype(n);
    }

    // used for side-effects
    void operator"" _print ( const char* str )
    {
        std::cout << str;
    }

    int main(){
        double x = 90.0_deg;
        std::cout << std::fixed << x << '\n';
        mytype y = 123_mytype;
        std::cout << y.m << '\n';
        0x123ABC_print;
    }

Output:

    1.570796
    123
    0x123ABC

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/language/user_literal&oldid=67241"
Category:

- Todo without reason