//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // shared_ptr // explicit operator bool() const; #include #include #include #include "test_macros.h" struct A { int a; virtual ~A() {} }; struct B : A {}; int main(int, char**) { static_assert(std::is_constructible >::value, ""); static_assert(!std::is_convertible, bool>::value, ""); { const std::shared_ptr p(new int(32)); assert(p); } { const std::shared_ptr p; assert(!p); } #if !defined(TEST_HAS_NO_RTTI) { std::shared_ptr basePtr = std::make_shared(); std::shared_ptr sp = std::dynamic_pointer_cast(basePtr); assert(sp); } #endif return 0; }