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