]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/libsupc++/typeinfo
Update copyright years in libstdc++-v3/
[thirdparty/gcc.git] / libstdc++-v3 / libsupc++ / typeinfo
index aaa756bfebcd29e6e853c63c92f6ed8f934c9f17..8e4c3aedce5b663a287c4d82c3a25c632b0f2957 100644 (file)
@@ -1,7 +1,5 @@
 // RTTI support for -*- C++ -*-
-// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
-// Free Software Foundation
+// Copyright (C) 1994-2014 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
@@ -9,12 +7,12 @@
 // it under the terms of the GNU General Public License as published by
 // the Free Software Foundation; either version 3, or (at your option)
 // any later version.
-// 
+//
 // GCC 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.
-// 
+//
 // Under Section 7 of GPL version 3, you are granted additional
 // permissions described in the GCC Runtime Library Exception, version
 // 3.1, as published by the Free Software Foundation.
 #pragma GCC system_header
 
 #include <exception>
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
 #include <bits/hash_bytes.h>
 #endif
 
-
 #pragma GCC visibility push(default)
 
 extern "C++" {
@@ -80,7 +77,7 @@ namespace __cxxabiv1
   #endif
 #endif
 
-namespace std 
+namespace std
 {
   /**
    *  @brief  Part of RTTI.
@@ -88,7 +85,7 @@ namespace std
    *  The @c type_info class describes type information generated by
    *  an implementation.
   */
-  class type_info 
+  class type_info
   {
   public:
     /** Destructor first. Being the first non-inline virtual function, this
@@ -99,15 +96,15 @@ namespace std
 
     /** Returns an @e implementation-defined byte string; this is not
      *  portable between compilers!  */
-    const char* name() const
+    const char* name() const _GLIBCXX_NOEXCEPT
     { return __name[0] == '*' ? __name + 1 : __name; }
 
 #if !__GXX_TYPEINFO_EQUALITY_INLINE
     // In old abi, or when weak symbols are not supported, there can
     // be multiple instances of a type_info object for one
     // type. Uniqueness must use the _name value, not object address.
-    bool before(const type_info& __arg) const;
-    bool operator==(const type_info& __arg) const;
+    bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT;
+    bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT;
 #else
   #if !__GXX_MERGED_TYPEINFO_NAMES
     /** Returns true if @c *this precedes @c __arg in the implementation's
@@ -115,12 +112,12 @@ namespace std
     // Even with the new abi, on systems that support dlopen
     // we can run into cases where type_info names aren't merged,
     // so we still need to do string comparison.
-    bool before(const type_info& __arg) const
+    bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT
     { return (__name[0] == '*' && __arg.__name[0] == '*')
        ? __name < __arg.__name
        : __builtin_strcmp (__name, __arg.__name) < 0; }
 
-    bool operator==(const type_info& __arg) const
+    bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
     {
       return ((__name == __arg.__name)
              || (__name[0] != '*' &&
@@ -129,17 +126,17 @@ namespace std
   #else
     // On some targets we can rely on type_info's NTBS being unique,
     // and therefore address comparisons are sufficient.
-    bool before(const type_info& __arg) const
+    bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT
     { return __name < __arg.__name; }
 
-    bool operator==(const type_info& __arg) const
+    bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
     { return __name == __arg.__name; }
   #endif
 #endif
-    bool operator!=(const type_info& __arg) const
+    bool operator!=(const type_info& __arg) const _GLIBCXX_NOEXCEPT
     { return !operator==(__arg); }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
     size_t hash_code() const noexcept
     {
 #  if !__GXX_MERGED_TYPEINFO_NAMES
@@ -149,7 +146,7 @@ namespace std
       return reinterpret_cast<size_t>(__name);
 #  endif
     }
-#endif // __GXX_EXPERIMENTAL_CXX0X__
+#endif // C++11
 
     // Return true if this is a pointer type of some kind
     virtual bool __is_pointer_p() const;
@@ -172,9 +169,9 @@ namespace std
 
   protected:
     const char *__name;
-    
+
     explicit type_info(const char *__n): __name(__n) { }
-    
+
   private:
     /// Assigning type_info is not supported.
     type_info& operator=(const type_info&);
@@ -187,7 +184,7 @@ namespace std
    *
    *  If you attempt an invalid @c dynamic_cast expression, an instance of
    *  this class (or something derived from this class) is thrown.  */
-  class bad_cast : public exception 
+  class bad_cast : public exception
   {
   public:
     bad_cast() _GLIBCXX_USE_NOEXCEPT { }
@@ -199,12 +196,12 @@ namespace std
     // See comment in eh_exception.cc.
     virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
   };
-  
-  /** 
+
+  /**
    *  @brief Thrown when a NULL pointer in a @c typeid expression is used.
    *  @ingroup exceptions
    */
-  class bad_typeid : public exception 
+  class bad_typeid : public exception
   {
   public:
     bad_typeid () _GLIBCXX_USE_NOEXCEPT { }
@@ -218,7 +215,8 @@ namespace std
   };
 } // namespace std
 
+} // extern "C++"
+
 #pragma GCC visibility pop
 
-} // extern "C++"
 #endif