<div dir="ltr">The following snippet compiles just fine using GCC 4.8.1 over at <a href="http://ideone.com">ideone.com</a>, but fails (on an admittedly old revision: ) of clang.  What is the valid syntax for this construct?<div>
<br></div><font face="courier new, monospace">template <char... Chars><br>class Obj;<br><br>template <char... Chars><br>constexpr Obj<Chars...> operator "" _test();<br><br>template <char... Chars><br>
class Obj<br>{<br>friend Obj operator"" _test <Chars...>();<br><br>private:<br>    constexpr Obj() { }<br>};<br><br>template <char... Chars><br>constexpr Obj<Chars...> operator "" _test()<br>
{<br>    return Obj<Chars...>();<br>}<br><br>int main()<br>{<br>    constexpr auto x = 1234_test;<br>    return 0;<br>}</font><div><br></div><div>I'm compiling with <b><font face="courier new, monospace">clang++ -std=c++11 literal.cpp</font></b></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">The errors are (note the line numbers are funky because I commented out a bunch of previous lines in the file to get this minimal reproduction):</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><div>literal.cpp:771:16: error: parameter declaration for literal operator</div><div>      'operator "" _test' is not valid</div>
<div>    friend Obj operator"" _test <Chars...>();</div><div>               ^</div><div>literal.cpp:780:12: error: calling a private constructor of class</div><div>      'Obj<'1', '2', '3', '4'>'</div>
<div>    return Obj<Chars...>();</div><div>           ^</div><div>literal.cpp:785:28: note: in instantiation of function template</div><div>      specialization 'operator "" _test<'1', '2', '3', '4'>' requested here</div>
<div>    constexpr auto x = 1234_test;</div><div>                           ^</div><div>literal.cpp:774:15: note: declared private here</div><div>    constexpr Obj() { }</div><div>              ^</div><div>literal.cpp:785:20: error: constexpr variable 'x' must be initialized by</div>
<div>      a constant expression</div><div>    constexpr auto x = 1234_test;</div><div>                   ^   ~~~~~~~~~</div><div>3 errors generated.</div></font></div></div>