diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6a1ac9ad70e..1de45fbd4f6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2004-06-28 Paolo Carlini + + * include/bits/cpp_type_traits.h: Move the additions to + namespace __gnu_internal outside of namespace std; trivial + formatting fixes. + 2004-06-28 Benjamin Kosnik * include/debug/safe_base.h (__gnu_debug::_Safe_sequence_base): diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h index d025c8ffe63..d4e4ea0410a 100644 --- a/libstdc++-v3/include/bits/cpp_type_traits.h +++ b/libstdc++-v3/include/bits/cpp_type_traits.h @@ -1,6 +1,6 @@ // The -*- C++ -*- type traits classes for internal use in libstdc++ -// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 2000, 2001, 2002, 2003, 2004 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 @@ -64,6 +64,19 @@ // -- Gaby (dosreis@cmla.ens-cachan.fr) 2000-03-06. // +// NB: g++ can not compile these if declared within the class +// __is_pod itself. +namespace __gnu_internal +{ + typedef char __one; + typedef char __two[2]; + + template + __one __test_type (int _Tp::*); + template + __two& __test_type (...); +} // namespace __gnu_internal + namespace std { // Compare for equality of types. @@ -71,18 +84,18 @@ namespace std struct __are_same { enum - { - _M_type = 0 - }; + { + _M_type = 0 + }; }; template struct __are_same<_Tp, _Tp> { enum - { - _M_type = 1 - }; + { + _M_type = 1 + }; }; // Define a nested type if some predicate holds. @@ -92,7 +105,7 @@ namespace std }; template - struct __enable_if<_Tp, true> + struct __enable_if<_Tp, true> { typedef _Tp _M_type; }; @@ -102,18 +115,18 @@ namespace std struct __is_void { enum - { - _M_type = 0 - }; + { + _M_type = 0 + }; }; template<> struct __is_void { enum - { - _M_type = 1 - }; + { + _M_type = 1 + }; }; // @@ -123,9 +136,9 @@ namespace std struct __is_integer { enum - { - _M_type = 0 - }; + { + _M_type = 0 + }; }; // Thirteen specializations (yes there are eleven standard integer @@ -135,213 +148,198 @@ namespace std struct __is_integer { enum - { - _M_type = 1 - }; + { + _M_type = 1 + }; }; template<> struct __is_integer { enum - { - _M_type = 1 - }; + { + _M_type = 1 + }; }; template<> struct __is_integer { enum - { - _M_type = 1 - }; + { + _M_type = 1 + }; }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; # ifdef _GLIBCXX_USE_WCHAR_T template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; # endif template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_integer - { - enum + struct __is_integer { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; // // Floating point types // template - struct __is_floating - { - enum + struct __is_floating { - _M_type = 0 + enum + { + _M_type = 0 + }; }; - }; // three specializations (float, double and 'long double') template<> - struct __is_floating - { - enum + struct __is_floating { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_floating - { - enum + struct __is_floating { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; template<> - struct __is_floating - { - enum + struct __is_floating { - _M_type = 1 + enum + { + _M_type = 1 + }; }; - }; // // An arithmetic type is an integer type or a floating point type // template - struct __is_arithmetic - { - enum + struct __is_arithmetic { - _M_type = __is_integer<_Tp>::_M_type || __is_floating<_Tp>::_M_type + enum + { + _M_type = __is_integer<_Tp>::_M_type || __is_floating<_Tp>::_M_type + }; }; - }; - + // // A fundamental type is `void' or and arithmetic type // template - struct __is_fundamental - { - enum + struct __is_fundamental { - _M_type = __is_void<_Tp>::_M_type || __is_arithmetic<_Tp>::_M_type + enum + { + _M_type = __is_void<_Tp>::_M_type || __is_arithmetic<_Tp>::_M_type + }; }; - }; // // For the immediate use, the following is a good approximation // - - // NB: g++ can not compile these if declared within the class - // __is_pod itself. - namespace __gnu_internal - { - typedef char __one; - typedef char __two[2]; - - template - __one __test_type (int _Tp::*); - template - __two& __test_type (...); - } - - template - struct __is_pod - { - enum + struct __is_pod { - _M_type = (sizeof(__gnu_internal::__test_type<_Tp>(0)) != sizeof(__gnu_internal::__one)) + enum + { + _M_type = (sizeof(__gnu_internal::__test_type<_Tp>(0)) + != sizeof(__gnu_internal::__one)) + }; }; - }; } // namespace std - #endif //_CPP_TYPE_TRAITS_H