#ifndef BOOST_QVM_DEDUCE_SCALAR_HPP_INCLUDED #define BOOST_QVM_DEDUCE_SCALAR_HPP_INCLUDED /// Copyright (c) 2008-2021 Emil Dotchevski and Reverge Studios, Inc. /// Distributed under the Boost Software License, Version 1.0. (See accompanying /// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include namespace boost { namespace qvm { namespace deduce_scalar_detail { template struct deduce_scalar_impl { typedef void type; }; template struct deduce_scalar_impl { typedef T type; }; template <> struct deduce_scalar_impl { typedef unsigned char type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed short type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed short type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned char type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed short type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed short type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned short type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed int type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned int type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef signed long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef unsigned long type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef float type; }; template <> struct deduce_scalar_impl { typedef double type; }; template <> struct deduce_scalar_impl { typedef double type; }; } template struct deduce_scalar { BOOST_QVM_STATIC_ASSERT(is_scalar::value); BOOST_QVM_STATIC_ASSERT(is_scalar::value); typedef typename deduce_scalar_detail::deduce_scalar_impl::type type; }; } } #endif