#ifndef BOOST_SAFE_FORMAT_HPP #define BOOST_SAFE_FORMAT_HPP // Copyright (c) 2015 Robert Ramey // // 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 #include #include namespace { // create an output manipulator which prints variable type and limits // as well as value template struct safe_format_impl { const T & m_t; safe_format_impl(const T & t) : m_t(t) {} template friend std::basic_ostream & operator<<( std::basic_ostream & os, const safe_format_impl & f ){ return os << "<" << boost::core::demangle(typeid( typename boost::safe_numerics::base_type::type ).name() ) << ">[" << std::numeric_limits::min() << "," << std::numeric_limits::max() << "] = " << f.m_t; } }; } // anonymous namespace template auto safe_format(const T & t){ return safe_format_impl(t); } #endif // BOOST_SAFE_FORMAT_HPP