]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/include/ext/pod_char_traits.h
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / include / ext / pod_char_traits.h
index 568af4b05b4c34f5f620cc2e0600549f20d50bd4..9f3bee80667246b39a0280b6788751ec5853b8f5 100644 (file)
@@ -1,7 +1,6 @@
 // POD character, std::char_traits specialization -*- C++ -*-
 
-// Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011
-// Free Software Foundation, Inc.
+// Copyright (C) 2002-2017 Free Software Foundation, Inc.
 //
 // 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
@@ -46,13 +45,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   // int_type to properly hold the full range of char_type values as
   // well as EOF.
   /// @brief A POD class that serves as a character abstraction class.
-  template<typename V, typename I, typename S = std::mbstate_t>
+  template<typename _Value, typename _Int, typename _St = std::mbstate_t>
     struct character
     {
-      typedef V                                value_type;
-      typedef I                                int_type;
-      typedef S                                state_type;
-      typedef character<V, I, S>       char_type;
+      typedef _Value                           value_type;
+      typedef _Int                             int_type;
+      typedef _St                              state_type;
+      typedef character<_Value, _Int, _St>     char_type;
 
       value_type       value;
 
@@ -74,14 +73,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
     };
 
-  template<typename V, typename I, typename S>
+  template<typename _Value, typename _Int, typename _St>
     inline bool
-    operator==(const character<V, I, S>& lhs, const character<V, I, S>& rhs)
+    operator==(const character<_Value, _Int, _St>& lhs,
+              const character<_Value, _Int, _St>& rhs)
     { return lhs.value == rhs.value; }
 
-  template<typename V, typename I, typename S>
+  template<typename _Value, typename _Int, typename _St>
     inline bool
-    operator<(const character<V, I, S>& lhs, const character<V, I, S>& rhs)
+    operator<(const character<_Value, _Int, _St>& lhs,
+             const character<_Value, _Int, _St>& rhs)
     { return lhs.value < rhs.value; }
 
 _GLIBCXX_END_NAMESPACE_VERSION
@@ -92,14 +93,14 @@ namespace std _GLIBCXX_VISIBILITY(default)
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   /// char_traits<__gnu_cxx::character> specialization.
-  template<typename V, typename I, typename S>
-    struct char_traits<__gnu_cxx::character<V, I, S> >
+  template<typename _Value, typename _Int, typename _St>
+    struct char_traits<__gnu_cxx::character<_Value, _Int, _St> >
     {
-      typedef __gnu_cxx::character<V, I, S>    char_type;
-      typedef typename char_type::int_type     int_type;
-      typedef typename char_type::state_type   state_type;
-      typedef fpos<state_type>                 pos_type;
-      typedef streamoff                                off_type;
+      typedef __gnu_cxx::character<_Value, _Int, _St>  char_type;
+      typedef typename char_type::int_type             int_type;
+      typedef typename char_type::state_type           state_type;
+      typedef fpos<state_type>                         pos_type;
+      typedef streamoff                                        off_type;
 
       static void
       assign(char_type& __c1, const char_type& __c2)
@@ -143,6 +144,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static char_type*
       move(char_type* __s1, const char_type* __s2, size_t __n)
       { 
+       if (__n == 0)
+         return __s1;
        return static_cast<char_type*>
          (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)));
       }
@@ -150,6 +153,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static char_type*
       copy(char_type* __s1, const char_type* __s2, size_t __n)
       {
+       if (__n == 0)
+         return __s1;
        std::copy(__s2, __s2 + __n, __s1);
        return __s1;
       }
@@ -176,7 +181,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       static int_type
       eof() 
       {
-       int_type __r = { -1 };
+       int_type __r = { static_cast<typename __gnu_cxx::__conditional_type
+                        <std::__is_integer<int_type>::__value,
+                        int_type, int>::__type>(-1) };
        return __r;
       }