60 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <locale>10 11// template <class Facet> const Facet& use_facet(const locale& loc);12 13#include <locale>14#include <cassert>15#include <typeinfo>16 17#include "test_macros.h"18 19int facet_count = 0;20 21struct my_facet22 : public std::locale::facet23{24 static std::locale::id id;25 26 bool im_alive;27 28 my_facet() : im_alive(true) {++facet_count;}29 ~my_facet() {im_alive = false; --facet_count;}30};31 32std::locale::id my_facet::id;33 34int main(int, char**)35{36#ifndef TEST_HAS_NO_EXCEPTIONS37 try38 {39 const my_facet& f = std::use_facet<my_facet>(std::locale());40 ((void)f); // Prevent unused warning41 assert(false);42 }43 catch (std::bad_cast&)44 {45 }46#endif47 const my_facet* fp = 0;48 {49 std::locale loc(std::locale(), new my_facet);50 const my_facet& f = std::use_facet<my_facet>(loc);51 assert(f.im_alive);52 fp = &f;53 assert(fp->im_alive);54 assert(facet_count == 1);55 }56 assert(facet_count == 0);57 58 return 0;59}60