diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp | 25 | ||||
| -rw-r--r-- | clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp | 45 |
2 files changed, 45 insertions, 25 deletions
diff --git a/clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp b/clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp index 7e09bc8aef2..c81e4ef1b1b 100644 --- a/clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp +++ b/clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp @@ -91,28 +91,3 @@ namespace test2 { a.test3(); // expected-note {{in instantiation}} } } - -namespace test3 { - struct A { - void foo(void (A::*)(int)); // expected-note {{passing argument to parameter here}} - template<typename T> void g(T); - - void test() { - foo(&g<int>); // expected-error {{cannot initialize a parameter}} - } - }; -} - -// This should succeed. -namespace test4 { - struct A { - static void f(void (A::*)()); - static void f(void (*)(int)); - void g(); - static void g(int); - - void test() { - f(&g); - } - }; -} diff --git a/clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp b/clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp new file mode 100644 index 00000000000..170c734fd30 --- /dev/null +++ b/clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp @@ -0,0 +1,45 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// rdar://problem/8347416 +namespace test0 { + struct A { + void foo(void (A::*)(int)); // expected-note {{passing argument to parameter here}} + template<typename T> void g(T); + + void test() { + // FIXME: this diagnostic is terrible + foo(&g<int>); // expected-error {{cannot initialize a parameter of type 'void (test0::A::*)(int)' with an rvalue of type '<overloaded function type>'}} + } + }; +} + +// This should succeed. +namespace test1 { + struct A { + static void f(void (A::*)()); + static void f(void (*)(int)); + void g(); + static void g(int); + + void test() { + f(&g); + } + }; +} + +// Also rdar://problem/8347416 +namespace test2 { + struct A { + static int foo(short); + static int foo(float); + int foo(int); + int foo(double); + + void test(); + }; + + void A::test() { + // FIXME: This diagnostic is terrible. + int (A::*ptr)(int) = &(A::foo); // expected-error {{cannot initialize a variable of type 'int (test2::A::*)(int)' with an rvalue of type '<overloaded function type>'}} + } +} |

