質問: N3797(pdf) の P.309 にある > > > ``` > template double operator "" _\u03C0(); > > ``` > > これの意味がわかりません。 引数が空って、2_π の 2 が無視されるんですか? それとも _π で使うなら constexpr との違いは? なぜパラメータパックなんですか?
回答: 無視されるわけではなく、_π以前の部分の文字列がcharのパラメーターパックとして渡されます。 例えば、`14142_π`は、`operator "" _π<'1', '4', '1', '4', '2'>()`の呼び出しと同じです。 以下のサンプルでは、パラメーターパックから整数値を復元しています。 ``` #include #include template double decimal(T value) { return value - '0'; } template double decimal(T value, Targs... Fargs) { return (value - '0') * pow(10, sizeof...(Fargs)) + decimal(Fargs...); } template double operator "" _π() { return decimal(T...); } int main() { std::cout << 14142_π; } ```