#include <debug_assert.h>
// 1 a class if a facet if it is publicly derived from another facet
-class gnu_input_iterator: public std::iterator<std::input_iterator_tag, char>
-{
- value_type it;
-public:
- gnu_input_iterator(value_type orig): it(orig) { }
-
- value_type
- operator*() const { return it; }
-
- reference
- operator++(){ return ++it; }
-
- reference
- operator++(int){ ++it; return it; }
-};
-
-bool
-operator==(const gnu_input_iterator& lhs, const gnu_input_iterator& rhs)
-{ return true; }
-
-bool
-operator!=(const gnu_input_iterator& lhs, const gnu_input_iterator& rhs)
-{ return true; }
-
-class gnu_output_iterator: public std::iterator<std::output_iterator_tag, char>
-{
- value_type it;
-public:
- gnu_output_iterator(value_type orig): it(orig) { }
-
- value_type
- operator*(){ return it; }
-
- gnu_output_iterator&
- operator=(value_type obj){ it = obj; return *this; }
-
- reference
- operator++(){ return ++it; }
-
- reference
- operator++(int){ ++it; return it; }
-
-};
+typedef std::istreambuf_iterator<char> input_iterator;
+typedef std::ostreambuf_iterator<char> output_iterator;
class gnu_collate: public std::collate<char> { };
class gnu_ctype: public std::ctype<char> { };
};
-class gnu_money_get_in: public std::money_get<char, gnu_input_iterator>
+class gnu_money_get_in: public std::money_get<char, input_iterator>
{
public:
explicit
gnu_money_get_in(size_t refs = 0)
- : std::money_get<char, gnu_input_iterator>(refs) { }
+ : std::money_get<char, input_iterator>(refs) { }
};
-class gnu_money_put_out: public std::money_put<char, gnu_output_iterator>
+class gnu_money_put_out: public std::money_put<char, output_iterator>
{
public:
explicit
gnu_money_put_out(size_t refs = 0)
- : std::money_put<char, gnu_output_iterator>(refs) { }
+ : std::money_put<char, output_iterator>(refs) { }
};
class gnu_numpunct_byname: public std::numpunct_byname<char>
: std::numpunct_byname<char>(c, refs) { }
};
-class gnu_num_get_in: public std::num_get<char, gnu_input_iterator>
+class gnu_num_get_in: public std::num_get<char, input_iterator>
{
public:
explicit
gnu_num_get_in(size_t refs = 0)
- : std::num_get<char, gnu_input_iterator>(refs) { }
+ : std::num_get<char, input_iterator>(refs) { }
};
-class gnu_num_put_out: public std::num_put<char, gnu_output_iterator>
+class gnu_num_put_out: public std::num_put<char, output_iterator>
{
public:
explicit
gnu_num_put_out(size_t refs = 0)
- : std::num_put<char, gnu_output_iterator>(refs) { }
+ : std::num_put<char, output_iterator>(refs) { }
};
class gnu_time_get_byname: public std::time_get_byname<char>
: std::time_get_byname<char>(c, refs) { }
};
-class gnu_time_get_in: public std::time_get<char, gnu_input_iterator>
+class gnu_time_get_in: public std::time_get<char, input_iterator>
{
public:
explicit
gnu_time_get_in(size_t refs = 0)
- : std::time_get<char, gnu_input_iterator>(refs) { }
+ : std::time_get<char, input_iterator>(refs) { }
};
class gnu_time_put_byname: public std::time_put_byname<char>
: std::time_put_byname<char>(c, refs) { }
};
-class gnu_time_put_out: public std::time_put<char, gnu_output_iterator>
+class gnu_time_put_out: public std::time_put<char, output_iterator>
{
public:
explicit
gnu_time_put_out(size_t refs = 0)
- : std::time_put<char, gnu_output_iterator>(refs) { }
+ : std::time_put<char, output_iterator>(refs) { }
};
class gnu_messages_byname: public std::messages_byname<char>
gnu_time_put_byname obj15("gnu_message_byname", 0);
gnu_time_get_in obj16(0);
gnu_time_get_byname obj17("gnu_message_byname", 0);
- // gnu_num_put_out obj18(0);
- // gnu_num_get_in obj19(0);
+ gnu_num_put_out obj18(0);
+ gnu_num_get_in obj19(0);
gnu_numpunct_byname obj20("gnu_message_byname", 0);
gnu_money_put_out obj21(0);
gnu_money_get_in obj22(0);
--- /dev/null
+// 2000-09-11 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2000 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 22.1.1.4 locale operators [lib.locale.operators]
+
+#include <locale>
+#include <debug_assert.h>
+
+typedef std::codecvt<char, char, mbstate_t> ccodecvt;
+class gnu_codecvt: public ccodecvt { };
+
+void test01()
+{
+ using namespace std;
+
+ bool test = true;
+ string str1, str2;
+
+ // construct a locale object with the C facet
+ const locale& cloc = locale::classic();
+ // construct a locale object with the specialized facet.
+ locale loc(locale::classic(), new gnu_codecvt);
+ VERIFY ( cloc != loc );
+ VERIFY ( !(cloc == loc) );
+
+ str1 = cloc.name();
+ str2 = loc.name();
+ VERIFY( loc(str1, str2) == false );
+}
+
+int main ()
+{
+ test01();
+
+ return 0;
+}