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.
 

Reply via email to