C++11では、ユーザー定義リテラルという、リテラル値に対して型付けするための機能が導入されました。C++11時点では、標準ライブラリでユーザーリテラルは使われてはいません。
C++1yでは、標準でいくつかのユーザー定義リテラルを提供する提案が出ています。
代表的なところでは、時間ライブラリのChronoがあります。このライブラリは、時間の間隔を表すseconds, millisecondsといった型が用意されているので、以下のようにして値を型付けできます:
template <class Duration> void f(Duration d) {} seconds s(3); // 3秒 // 関数に渡す f(seconds(2)); // 2秒 f(milliseconds(3)); // 3ミリ秒
この提案では、std::suffixes::chrono名前空間に、Chronoライブラリ用のユーザー定義リテラルを置くことになっているので、以下のように書けます:
template <class Duration> void f(Duration d) {} using namespace std::suffixes::chrono; auto s = 3s; // 3秒 // 関数に渡す f(2s); // 2秒 f(3ms); // 3ミリ秒
このほかには、2進数リテラルもあります。
#include <suffix_binary> using namespace std::suffixes::binary; auto x = 100b; // int x = 4
これらの多くのリテラルはconstexprで定義されるので、リテラル値の計算や型変換はコンパイル時に行われます。
N3402 User-defined Literals for Standard Library Types