diff options
Diffstat (limited to 'libcxx/test')
3 files changed, 61 insertions, 23 deletions
diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp index 4496740715a..a3bb1a0cc2a 100644 --- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp +++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp @@ -15,23 +15,42 @@ #include <memory> #include <cassert> +#include "test_macros.h" -struct Deleter -{ - void operator()(void*) {} +struct Deleter { + void operator()(void*) const {} - int test() {return 5;} - int test() const {return 6;} + int test() { return 5; } + int test() const { return 6; } }; -int main() -{ - { +int main() { + { std::unique_ptr<int[], Deleter> p; assert(p.get_deleter().test() == 5); - } - { + } + { const std::unique_ptr<int[], Deleter> p; assert(p.get_deleter().test() == 6); - } + } + { + typedef std::unique_ptr<int[], const Deleter&> UPtr; + const Deleter d; + UPtr p(nullptr, d); + const UPtr& cp = p; + ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&); + ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&); + assert(p.get_deleter().test() == 6); + assert(cp.get_deleter().test() == 6); + } + { + typedef std::unique_ptr<int[], Deleter&> UPtr; + Deleter d; + UPtr p(nullptr, d); + const UPtr& cp = p; + ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&); + ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&); + assert(p.get_deleter().test() == 5); + assert(cp.get_deleter().test() == 5); + } } diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp index 5ed8a22b14c..3262abb5e28 100644 --- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp +++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp @@ -15,23 +15,42 @@ #include <memory> #include <cassert> +#include "test_macros.h" -struct Deleter -{ - void operator()(void*) {} +struct Deleter { + void operator()(void*) const {} - int test() {return 5;} - int test() const {return 6;} + int test() { return 5; } + int test() const { return 6; } }; -int main() -{ - { +int main() { + { std::unique_ptr<int, Deleter> p; assert(p.get_deleter().test() == 5); - } - { + } + { const std::unique_ptr<int, Deleter> p; assert(p.get_deleter().test() == 6); - } + } + { + typedef std::unique_ptr<int, const Deleter&> UPtr; + const Deleter d; + UPtr p(nullptr, d); + const UPtr& cp = p; + ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&); + ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&); + assert(p.get_deleter().test() == 6); + assert(cp.get_deleter().test() == 6); + } + { + typedef std::unique_ptr<int, Deleter&> UPtr; + Deleter d; + UPtr p(nullptr, d); + const UPtr& cp = p; + ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&); + ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&); + assert(p.get_deleter().test() == 5); + assert(cp.get_deleter().test() == 5); + } } diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h index 3cde8cc6c5b..bb3bea7a813 100644 --- a/libcxx/test/support/test_macros.h +++ b/libcxx/test/support/test_macros.h @@ -184,7 +184,7 @@ struct is_same<T, T> { enum {value = 1}; }; } // namespace test_macros_detail #define ASSERT_SAME_TYPE(...) \ - static_assert(test_macros_detail::is_same<__VA_ARGS__>::value, \ + static_assert((test_macros_detail::is_same<__VA_ARGS__>::value), \ "Types differ uexpectedly") #ifndef TEST_HAS_NO_EXCEPTIONS |

