[cfe-users] Syntax for declaring numeric literal operator template as friend
Michael Price
michael.b.price.dev at gmail.com
Fri Feb 14 09:13:38 PST 2014
The following snippet compiles just fine using GCC 4.8.1 over at ideone.com,
but fails (on an admittedly old revision: ) of clang. What is the valid
syntax for this construct?
template <char... Chars>
class Obj;
template <char... Chars>
constexpr Obj<Chars...> operator "" _test();
template <char... Chars>
class Obj
{
friend Obj operator"" _test <Chars...>();
private:
constexpr Obj() { }
};
template <char... Chars>
constexpr Obj<Chars...> operator "" _test()
{
return Obj<Chars...>();
}
int main()
{
constexpr auto x = 1234_test;
return 0;
}
I'm compiling with *clang++ -std=c++11 literal.cpp*
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):
literal.cpp:771:16: error: parameter declaration for literal operator
'operator "" _test' is not valid
friend Obj operator"" _test <Chars...>();
^
literal.cpp:780:12: error: calling a private constructor of class
'Obj<'1', '2', '3', '4'>'
return Obj<Chars...>();
^
literal.cpp:785:28: note: in instantiation of function template
specialization 'operator "" _test<'1', '2', '3', '4'>' requested here
constexpr auto x = 1234_test;
^
literal.cpp:774:15: note: declared private here
constexpr Obj() { }
^
literal.cpp:785:20: error: constexpr variable 'x' must be initialized by
a constant expression
constexpr auto x = 1234_test;
^ ~~~~~~~~~
3 errors generated.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20140214/4b96c08a/attachment.html>
More information about the cfe-users
mailing list