stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Travis Vitek" <Travis.Vi...@roguewave.com>
Subject FW: std::is_same and std::type_info::operator== equivalent?
Date Tue, 20 May 2008 01:15:19 GMT

Eric Lemings wrote:
>
>The code
> 
>typeid(T1) == typeid(T2)
> 
>is the runtime equivalent of
> 
>std::is_same<T1, T2>::value
> 
>correct?
> 

According to 5.2.8/4 of the current draft...

  When typeid is applied to a type-id, the result refers to a
  std::type_info object representing the type of the type-id.
  If the type of the type-id is a reference to a possibly cv-
  qualified type, the result of the typeid expression refers
  to a std::type_info object representing the cv-unqualified
  referenced type. If the type of the type-id is a class type
  or a reference to a class type, the class shall be
  completely-defined.

>From what I read, is_same doesn't require the two types to be fully defined and it doesn't
strip cv-qualifiers when comparing types. So the following testcase would fail...

#include <typeinfo>
#include <type_traits>
#include <cassert>

template <class T, class U>
bool is_same_type()
{
  return (typeid(T) == typeid(U));
}

class C;

int main ()
{
#define TEST(T,U) assert ((std::is_same<T,U>::value == is_same_type<T,U>()));

  TEST (int&, const int&); // fails statement 2
  TEST (C, C);             // fails statement 3

  return 0;
}


>Brad.
 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message