diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/conversion-function.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp index 6182678e311..c0c318ed336 100644 --- a/clang/test/SemaCXX/conversion-function.cpp +++ b/clang/test/SemaCXX/conversion-function.cpp @@ -1,4 +1,4 @@ -// RUN: clang-cc -fsyntax-only -verify %s +// RUN: clang-cc -fsyntax-only -verify %s class X { public: operator bool(); @@ -93,3 +93,31 @@ void f(Yb& a) { char ch = a; // OK. calls Yb::operator char(); } +// Test conversion + copy construction. +class AutoPtrRef { }; + +class AutoPtr { + // FIXME: Using 'unavailable' since we do not have access control yet. + // FIXME: The error message isn't so good. + AutoPtr(AutoPtr &) __attribute__((unavailable)); + +public: + AutoPtr(); + AutoPtr(AutoPtrRef); + + operator AutoPtrRef(); +}; + +AutoPtr make_auto_ptr(); + +AutoPtr test_auto_ptr(bool Cond) { + AutoPtr p1( make_auto_ptr() ); + + AutoPtr p; + if (Cond) + return p; // expected-error{{incompatible type returning}} + + return AutoPtr(); +} + + |