user-defined string literalはliteral operator templateでほげほげできないと何度言ったら…
私自身何度も疑問に思ってはその度に調べていたし、しょっちゅうtwitter上でも話題になるのでここに書いておきましょう。
すごく手短に言うと、
template<char ...str> struct hoge_t {}; template<char ...str> constexpr hoge_t<str...> operator ""_hoge();
このような定義(ここではliteral operator template形式とでも呼ぶことにします。)は、決してuser-defined string literalに対するoverload resolutionで選ばれることはないのです。literal operator template形式が使えるのは、「100_mega」や、「3.14_oyoso」など、オペランドが整数、浮動小数点数の時に限ります。