Benutzerliterale
#include <iostream>
#include <ostream>
#include <string>
int main()
{ ::std::cout << ::std::literals::string_literals::operator""s( "abc", 3 ).length() << '\n';
::std::cout << ::std::literals::operator""s( "abc", 3 ).length() << '\n';
::std::cout << ::std::operator""s( "abc", 3 ).length() << '\n'; }// 21.3.5, suffix for basic_string literals:
namespace std
{ inline namespace literals
{ inline namespace string_literals
{ string operator "" s( char const * str, ::std::size_t len ); }}}
inline: als ob in umgebendem Namensraum deklariert. zB.:
#ifdef C14
inline
#endif
main.cpp
#include <iostream>
constexpr double operator "" _DM( long double const d ){ ::std::cout << "XXX" << '\n'; return d/1.95583; }
int main(){ ::std::cout << 3.00_DM << '\n'; }
- Protokoll
main.cpp.cmd
main.cpp: In function 'constexpr double operator""_DM(long double)':
main.cpp:5:66: warning: conversion from 'long double' to 'double' may change value [-Wfloat-conversion]
constexpr double operator "" _DM( long double const d ){ return d/1.95583; }
~^~~~~~~~
-----------------------------
almost always auto, initialize with braces {}!
F:\r\j\autocomp\main.cpp:5:66: warning: implicit conversion loses floating-point precision: 'long double' to 'double' [clang-diagnostic-conversion]
constexpr double operator "" _DM( long double const d ){ return d/1.95583; }
^
F:\r\j\autocomp\main.cpp:5:67: warning: implicit conversion increases floating-point precision: 'double' to 'long double' [clang-diagnostic-double-promotion]
constexpr double operator "" _DM( long double const d ){ return d/1.95583; }
^
-----------------------------
1.53388
Annotationen ohne Grundstrich sind reserviert für die Standardbibliothek.