//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // template const Facet& use_facet(const locale& loc); #include #include #include #include "test_macros.h" int facet_count = 0; struct my_facet : public std::locale::facet { static std::locale::id id; bool im_alive; my_facet() : im_alive(true) {++facet_count;} ~my_facet() {im_alive = false; --facet_count;} }; std::locale::id my_facet::id; int main(int, char**) { #ifndef TEST_HAS_NO_EXCEPTIONS try { const my_facet& f = std::use_facet(std::locale()); ((void)f); // Prevent unused warning assert(false); } catch (std::bad_cast&) { } #endif const my_facet* fp = 0; { std::locale loc(std::locale(), new my_facet); const my_facet& f = std::use_facet(loc); assert(f.im_alive); fp = &f; assert(fp->im_alive); assert(facet_count == 1); } assert(facet_count == 0); return 0; }