00001 #ifndef BOOST_DETAIL_ATOMIC_TYPE_CLASSIFIER_HPP 00002 #define BOOST_DETAIL_ATOMIC_TYPE_CLASSIFIER_HPP 00003 00004 // Copyright (c) 2011 Helge Bahmann 00005 // 00006 // Distributed under the Boost Software License, Version 1.0. 00007 // See accompanying file LICENSE_1_0.txt or copy at 00008 // http://www.boost.org/LICENSE_1_0.txt) 00009 00010 namespace boost { namespace detail { namespace atomic { 00011 00012 template<typename T> 00013 struct type_classifier { 00014 typedef void test; 00015 }; 00016 00017 template<> 00018 struct type_classifier<char> {typedef int test;}; 00019 template<> 00020 struct type_classifier<unsigned char> {typedef int test;}; 00021 template<> 00022 struct type_classifier<signed char> {typedef int test;}; 00023 template<> 00024 struct type_classifier<unsigned short> {typedef int test;}; 00025 template<> 00026 struct type_classifier<signed short> {typedef int test;}; 00027 template<> 00028 struct type_classifier<unsigned int> {typedef int test;}; 00029 template<> 00030 struct type_classifier<signed int> {typedef int test;}; 00031 template<> 00032 struct type_classifier<unsigned long> {typedef int test;}; 00033 template<> 00034 struct type_classifier<long> {typedef int test;}; 00035 #ifdef BOOST_HAS_LONG_LONG 00036 template<> struct type_classifier<unsigned long long> 00037 {typedef int test;}; 00038 template<> struct type_classifier<signed long long> 00039 {typedef int test;}; 00040 #endif 00041 00042 template<typename T> 00043 struct type_classifier<T *> {typedef void * test;}; 00044 00045 template<typename T> 00046 struct sign_trait { 00047 typedef void test; 00048 }; 00049 00050 template<> 00051 struct sign_trait<char> {typedef int test;}; 00052 template<> 00053 struct sign_trait<unsigned char> {typedef unsigned int test;}; 00054 template<> 00055 struct sign_trait<signed char> {typedef int test;}; 00056 template<> 00057 struct sign_trait<unsigned short> {typedef unsigned int test;}; 00058 template<> 00059 struct sign_trait<signed short> {typedef int test;}; 00060 template<> 00061 struct sign_trait<unsigned int> {typedef unsigned int test;}; 00062 template<> 00063 struct sign_trait<signed int> {typedef int test;}; 00064 template<> 00065 struct sign_trait<unsigned long> {typedef unsigned int test;}; 00066 template<> 00067 struct sign_trait<long> {typedef int test;}; 00068 #ifdef BOOST_HAS_LONG_LONG 00069 template<> struct sign_trait<unsigned long long> 00070 {typedef unsigned int test;}; 00071 template<> struct sign_trait<signed long long> 00072 {typedef int test;}; 00073 #endif 00074 00075 00076 00077 }}} 00078 00079 #endif