operator "" _π について


N3797([pdf](http://www.open-
std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf)) の P.309 にある  

>
[code]

>     template <char...> double operator "" _\u03C0();
>  
[/code]

これの意味がわかりません。  
引数が空って、2_π の 2 が無視されるんですか？  
それとも _π で使うなら constexpr との違いは？  
なぜパラメータパックなんですか？




無視されるわけではなく、_π以前の部分の文字列がcharのパラメーターパックとして渡されます。

例えば、`14142_π`は、`operator "" _π<'1', '4', '1', '4', '2'>()`の呼び出しと同じです。  
以下のサンプルでは、パラメーターパックから整数値を復元しています。

[code]

    #include <iostream>
    #include <cmath>
    
    template<typename T>
    double decimal(T value) {
        return value - '0';
    }
    
    template<typename T, typename... Targs>
    double decimal(T value, Targs... Fargs) {
        return (value - '0') * pow(10, sizeof...(Fargs)) + decimal(Fargs...);
    }
    
    template <char... T> double operator "" _π() {
        return decimal(T...);
    }
    
    int main() {
        std::cout << 14142_π;
    }
    
[/code]

<http://melpon.org/wandbox/permlink/Z0SiejoGSos13ooN>

