diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2019-11-18 18:15:49 (GMT) |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2019-11-27 15:03:04 (GMT) |
commit | fc3b4caa2e6a1970c75830445ef4aa7d03c5a533 (patch) | |
tree | 83e8eef4e853baab91218bf49120f04b342b8d96 /Tests/CMakeLib/testCMExtMemory.cxx | |
parent | 7046a5219893436cbe19b6973ac13fb489199601 (diff) | |
download | CMake-fc3b4caa2e6a1970c75830445ef4aa7d03c5a533.zip CMake-fc3b4caa2e6a1970c75830445ef4aa7d03c5a533.tar.gz CMake-fc3b4caa2e6a1970c75830445ef4aa7d03c5a533.tar.bz2 |
Memory management: cast functions for managed pointers
Diffstat (limited to 'Tests/CMakeLib/testCMExtMemory.cxx')
-rw-r--r-- | Tests/CMakeLib/testCMExtMemory.cxx | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Tests/CMakeLib/testCMExtMemory.cxx b/Tests/CMakeLib/testCMExtMemory.cxx new file mode 100644 index 0000000..6663c17 --- /dev/null +++ b/Tests/CMakeLib/testCMExtMemory.cxx @@ -0,0 +1,65 @@ +#include <iostream> +#include <memory> + +#include <cmext/memory> + +namespace { +class Base +{ +public: + virtual ~Base() = default; +}; + +class Derived : public Base +{ +public: + ~Derived() = default; + + void method() {} +}; + +template <typename T> +class Wrapper +{ +public: + Wrapper(T* v) + : value(v) + { + } + ~Wrapper() { delete value; } + + T* get() const { return value; } + +private: + T* value; +}; + +bool testReferenceCast() +{ + std::cout << "testReferenceCast()" << std::endl; + + std::unique_ptr<Base> u(new Derived); + cm::static_reference_cast<Derived>(u).method(); + cm::dynamic_reference_cast<Derived>(u).method(); + + std::shared_ptr<Base> s(new Derived); + cm::static_reference_cast<Derived>(s).method(); + cm::dynamic_reference_cast<Derived>(s).method(); + + // can also be used with custom wrappers + Wrapper<Base> w(new Derived); + cm::static_reference_cast<Derived>(w).method(); + cm::dynamic_reference_cast<Derived>(w).method(); + + return true; +} +} + +int testCMExtMemory(int /*unused*/, char* /*unused*/ []) +{ + if (!testReferenceCast()) { + return 1; + } + + return 0; +} |