This documentation is automatically generated by competitive-verifier/competitive-verifier
#include "tools/make_signed.hpp"
template <typename T>
struct make_signed {
using type = ...;
};
template <typename T>
using make_signed_t = typename make_signed<T>::type;
tools::make_signed
is guaranteed to satisfy the following properties.
std::make_signed_t<T>
is defined, tools::make_signed_t<T>
is std::make_signed_t<T>
.tools::make_signed_t<tools::int128_t>
is tools::int128_t
.tools::make_signed_t<tools::uint128_t>
is tools::int128_t
.tools::make_signed_t<const tools::int128_t>
is const tools::int128_t
.tools::make_signed_t<const tools::uint128_t>
is const tools::int128_t
.tools::make_signed_t<volatile tools::int128_t>
is volatile tools::int128_t
.tools::make_signed_t<volatile tools::uint128_t>
is volatile tools::int128_t
.tools::make_signed_t<const volatile tools::int128_t>
is const volatile tools::int128_t
.tools::make_signed_t<const volatile tools::uint128_t>
is const volatile tools::int128_t
.When using libstdc++ with -std=c++...
option, std::make_signed_t<tools::uint128_t>
cannot be compiled, but with tools::make_signed
, it can be compiled.
#ifndef TOOLS_MAKE_SIGNED_HPP
#define TOOLS_MAKE_SIGNED_HPP
#include <type_traits>
namespace tools {
template <typename T>
struct make_signed : ::std::make_signed<T> {};
template <typename T>
using make_signed_t = typename ::tools::make_signed<T>::type;
}
#endif
#line 1 "tools/make_signed.hpp"
#include <type_traits>
namespace tools {
template <typename T>
struct make_signed : ::std::make_signed<T> {};
template <typename T>
using make_signed_t = typename ::tools::make_signed<T>::type;
}