diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-12-19 02:07:47 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-12-19 02:07:47 +0000 |
commit | a865a1683aeaaeedfb47e0a2d1cb539d513118e5 (patch) | |
tree | c5c289a3df40cabb219afa3bca08f137cf12bb18 /clang/test/SemaCXX/conversion-function.cpp | |
parent | aeb50b38053db6b1697447c89b96d3e86c9e7136 (diff) | |
download | bcm5719-llvm-a865a1683aeaaeedfb47e0a2d1cb539d513118e5.tar.gz bcm5719-llvm-a865a1683aeaaeedfb47e0a2d1cb539d513118e5.zip |
PR21969: Improve diagnostics for a conversion function that has any pieces of a
declared return type (including a trailing-return-type in C++14).
llvm-svn: 224561
Diffstat (limited to 'clang/test/SemaCXX/conversion-function.cpp')
-rw-r--r-- | clang/test/SemaCXX/conversion-function.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp index ede23a2767e..077e4d9f3cc 100644 --- a/clang/test/SemaCXX/conversion-function.cpp +++ b/clang/test/SemaCXX/conversion-function.cpp @@ -172,12 +172,10 @@ namespace source_locations { namespace crazy_declarators { struct A { - (&operator bool())(); // expected-error {{must use a typedef to declare a conversion to 'bool (&)()'}} - - // FIXME: This diagnostic is misleading (the correct spelling - // would be 'operator int*'), but it's a corner case of a - // rarely-used syntax extension. - *operator int(); // expected-error {{must use a typedef to declare a conversion to 'int *'}} + (&operator bool())(); // expected-error {{use a typedef to declare a conversion to 'bool (&)()'}} + *operator int(); // expected-error {{put the complete type after 'operator'}} + // No suggestion of using a typedef here; that's not possible. + template<typename T> (&operator T())(); // expected-error-re {{cannot specify any part of a return type in the declaration of a conversion function{{$}}}} }; } |