#include <volatile_trait.h>
Public Types | |
typedef volatile T_type & | add |
typedef T_type & | remove |
Specializations for references do not consider a reference as a "top level" type qualifer unlike pointers; therefore, they add or remove the volatileness to/from the referenced type: volatile_trait<int&>::add -> volatile int& volatile_trait<int&>::remove -> int& volatile_trait<volatile int&>::add -> volatile int& volatile_trait<volatile int&>::remove -> int&
( a different placing of the qualifier, same type: volatile_trait<int&>::add -> int volatile& volatile_trait<int&>::remove -> int& volatile_trait<int volatile&>::add -> int volatile& volatile_trait<int volatile&>::remove -> int& )
whereas pointers themselves are treated like "top level" type qualifiers. Hence, they add or remove the volatileness from the pointer type qualifier: volatile_trait<int*>::add -> volatile int* volatile_trait<int*>::remove -> int* volatile_trait<volatile int*>::add -> volatile int* volatile_trait<volatile int*>::remove -> int* volatile_trait<int* volatile>::add -> int* volatile volatile_trait<int* volatile>::remove -> int*
( a different placing of the qualifier, same type: volatile_trait<int*>::add -> int volatile* volatile_trait<int*>::remove -> int* volatile_trait<int volatile*>::add -> int volatile* volatile_trait<int volatile*>::remove -> int* volatile_trait<int* volatile>::add -> int* volatile volatile_trait<int* volatile>::remove -> int* )
This is a major difference to boost::type_traits that consider a reference as a top level type qualifier
typedef volatile T_type& sigx::volatile_trait< T_type & >::add |
typedef T_type& sigx::volatile_trait< T_type & >::remove |