types_char.pass.cpp revision 22a74dcf50ff4338767607fa5a9d2916c2c85525
101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//===----------------------------------------------------------------------===// 201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// 301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// The LLVM Compiler Infrastructure 401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// 501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// This file is distributed under the University of Illinois Open Source 601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// License. See LICENSE.TXT for details. 701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// 801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//===----------------------------------------------------------------------===// 901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org 1001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// <locale> 1101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org 1201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// template <> 1301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// class codecvt<char, char, mbstate_t> 1401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// : public locale::facet, 1501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// public codecvt_base 1601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// { 1701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// public: 1801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// typedef char intern_type; 1901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// typedef char extern_type; 2001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// typedef mbstate_t state_type; 2101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// ... 2201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// }; 2301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org 2401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org#include <locale> 2501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org#include <type_traits> 2601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org#include <cassert> 2701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org 2801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgint main() 2901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org{ 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org typedef std::codecvt<char, char, std::mbstate_t> F; 3101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org static_assert((std::is_base_of<std::locale::facet, F>::value), ""); 325de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org static_assert((std::is_base_of<std::codecvt_base, F>::value), ""); 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org static_assert((std::is_same<F::intern_type, char>::value), ""); 34196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org static_assert((std::is_same<F::extern_type, char>::value), ""); 3501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org static_assert((std::is_same<F::state_type, std::mbstate_t>::value), ""); 3601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org std::locale l = std::locale::classic(); 3701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org assert(std::has_facet<F>(l)); 3801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org const F& f = std::use_facet<F>(l); 3901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org (void)F::id; 4001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org} 4101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org