This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/33098] New: __is_convertible_helper in tr1_impl/type_traits uses deprecated add_reference


Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure CC=gcc43 CXX=g++43 --program-suffix=43
--disable-multilib --enable-languages=c,c++
Thread model: posix
gcc version 4.3.0 20070816 (experimental)

The following code:
#include <type_traits>

int main() {
    bool b = std::is_convertible<int*,int*>::value;
}

when compiled with:
g++43 -std=c++0x test.cpp -o test

Gives:
include/c++/4.3.0/type_traits: In instantiation of ?const bool
std::__is_convertible_helper<int*, int*, false>::__value?:
include/c++/4.3.0/type_traits:258:   instantiated from
?std::is_convertible<int*, int*>?
test.cpp:5:   instantiated from here
include/c++/4.3.0/type_traits:243: error: invalid use of incomplete type
?struct std::add_reference<int*>?
include/c++/4.3.0/tr1_impl/type_traitsfwd.h:157: error: declaration of ?struct
std::add_reference<int*>?
include/c++/4.3.0/type_traits: In instantiation of ?std::is_convertible<int*,
int*>?:
test.cpp:5:   instantiated from here
include/c++/4.3.0/type_traits:258: error: ?std::__is_convertible_helper<int*,
int*, false>::__value? is not a valid template argument for type ?bool? because
it is a non-constant expression
test.cpp: In function ?int main()?:
test.cpp:5: error: ?value? is not a member of ?std::is_convertible<int*, int*>?

Besauce the following structure uses deprecated add_reference.

 template<typename _From, typename _To,
       bool = (is_void<_From>::value || is_void<_To>::value
           || is_function<_To>::value || is_array<_To>::value
           // This special case is here only to avoid warnings.
           || (is_floating_point<typename
               remove_reference<_From>::type>::value
               && __is_int_or_cref<_To>::__value))>
    struct __is_convertible_helper
    {
      // "An imaginary lvalue of type From...".
      static const bool __value = (__is_convertible_simple<typename
                   add_reference<_From>::type, _To>::__value);
    };

FIX:
change add_reference to add_lvalue_reference (see attached patch)


-- 
           Summary: __is_convertible_helper in tr1_impl/type_traits uses
                    deprecated add_reference
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: chris dot fairles at gmail dot com
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33098


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]