1f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//===----------------------------------------------------------------------===//
2f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//
3f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//                     The LLVM Compiler Infrastructure
4f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//
5f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// This file is dual licensed under the MIT and the University of Illinois Open
6f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// Source Licenses. See LICENSE.TXT for details.
7f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//
8f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne//===----------------------------------------------------------------------===//
9f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne
10f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// <fstream>
11f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne
12f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// template <class charT, class traits = char_traits<charT> >
13f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// class basic_ofstream
14f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne
15f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne// void open(const wchar_t* s, ios_base::openmode mode = ios_base::out);
16f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne
17f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne#include <fstream>
18f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne#include <cassert>
19f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne#include "platform_support.h"
20f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne
21f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourneint main()
22f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne{
23f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne#ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
24f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    std::wstring temp = get_wide_temp_file_name();
25f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    {
26f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        std::ofstream fs;
27f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(!fs.is_open());
28f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        char c = 'a';
29f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs << c;
30f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(fs.fail());
31f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs.open(temp.c_str());
32f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(fs.is_open());
33f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs << c;
34f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    }
35f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    {
36f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        std::ifstream fs(temp.c_str());
37f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        char c = 0;
38f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs >> c;
39f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(c == 'a');
40f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    }
41f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    _wremove(temp.c_str());
42f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    {
43f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        std::wofstream fs;
44f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(!fs.is_open());
45f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        wchar_t c = L'a';
46f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs << c;
47f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(fs.fail());
48f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs.open(temp.c_str());
49f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(fs.is_open());
50f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs << c;
51f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    }
52f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    {
53f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        std::wifstream fs(temp.c_str());
54f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        wchar_t c = 0;
55f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        fs >> c;
56f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne        assert(c == L'a');
57f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    }
58f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne    _wremove(temp.c_str());
59f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne#endif
60f493c2fed6cbe9e4a9a2891d730f1387bda5a91cPeter Collingbourne}
61