Opened 8 years ago

Closed 8 years ago

#2827 closed Bugs (fixed)

boost::detail::is_abstract_imp2::s1: 64 bit truncation warning

Reported by: pelee@… Owned by: johnmaddock
Milestone: Boost 1.39.0 Component: type_traits
Version: Boost Release Branch Severity: Problem
Keywords: Cc:


The constant detail::is_abstract_imp2::s1 is declared as unsigned, but initialized to the result of sizeof(). sizeof() returns a 64 bit value when compiled on a 64 bit target. This causes a 64-to-32 bit truncation warning on 64 bit targets.

One option would be to declare the constant to be of type size_t. I opted instead for a static_cast on the assumption that it would cause less disruption and that the sizeof() call in question would probably never return a value that required more than 32 bits.

template<class T>
struct is_abstract_imp2
   // Deduction fails if T is void, function type, 
   // reference type (14.8.2/2)or an abstract class type 
   // according to review status issue #337
   template<class U>
   static type_traits::no_type check_sig(U (*)[1]);
   template<class U>
   static type_traits::yes_type check_sig(...);
   // T must be a complete type, further if T is a template then
   // it must be instantiated in order for us to get the right answer:
   BOOST_STATIC_ASSERT(sizeof(T) != 0);

   // GCC2 won't even parse this template if we embed the computation
   // of s1 in the computation of value.
#ifdef __GNUC__
   BOOST_STATIC_CONSTANT(unsigned, s1 = static_cast<unsigned>(sizeof(is_abstract_imp2<T>::template check_sig<T>(0))));
#pragma warning(push)
#pragma warning(disable:6334)
   BOOST_STATIC_CONSTANT(unsigned, s1 = static_cast<unsigned>(sizeof(check_sig<T>(0))));
#pragma warning(pop)
   BOOST_STATIC_CONSTANT(bool, value = 
      (s1 == sizeof(type_traits::yes_type)));

Attachments (0)

Change History (1)

comment:1 Changed 8 years ago by johnmaddock

  • Resolution set to fixed
  • Status changed from new to closed

(In [51754]) Add is_virtual_base_of. Add extra tests for is_base_of to test virtual inheritance. Trivial warning fix for is_abstract: fixes #2827.

Add Comment

Modify Ticket

Change Properties
Set your email in Preferences
as closed The owner will remain johnmaddock.
The resolution will be deleted. Next status will be 'reopened'.

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.