Looks like const value types, once passed thru BOOST_IDENTITY_TYPE, "becomes" non-const. Like so:

// Attempt to implement a multi-argument utility macro, where arguments are 
// types, parenthesized only when required (by the user, when type has commas) 
#define ASSERT_EQUAL(  t1, t2 )  \
   static_assert( std::is_same< \
     BOOST_IDENTITY_TYPE((t1)), BOOST_IDENTITY_TYPE((t2)) \
     >::value, #t1 " not same as " #t2)

// sanity check: static_asserts as expected
ASSERT_EQUAL(  int, double ); 

// sanity check: static_assert as expected for types with commas
ASSERT_EQUAL(  (std::pair<int, double>), (std::pair<double, int>) ); 

// Here is the failure: this is expected to assert but it doesnt!
ASSERT_EQUAL(  const int, int );

From the implementation of  BOOST_IDENTITY_TYPE, it is clear why this is happening, as the function signature is independent of const-ness of value type. 

Is this a bug?  Or is this not the way BOOST_IDENTITY_TYPE is supposed to be used? 

Nick