fork download
  1. #include <boost/multiprecision/cpp_int.hpp>
  2.  
  3. int main() {
  4. using uint128_t = boost::multiprecision::uint128_t;
  5. uint128_t number = 100;
  6. uint128_t ten = 10;
  7.  
  8. auto leftShift = number << ten; // fail
  9. auto rightShift = number >> ten; // fail
  10. return 0;
  11. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main()':
prog.cpp:8:26: error: no match for 'operator<<' (operand types are 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' and 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}')
  auto leftShift = number << ten;  // fail
                          ^
prog.cpp:8:26: note: candidate: operator<<(int, int) <built-in>
prog.cpp:8:26: note:   no known conversion for argument 2 from 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' to 'int'
In file included from /usr/include/boost/multiprecision/cpp_int.hpp:12:0,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/number.hpp:1652:22: note: candidate: template<class Backend, boost::multiprecision::expression_template_option ExpressionTemplates> std::ostream& boost::multiprecision::operator<<(std::ostream&, const boost::multiprecision::number<Backend, ExpressionTemplates>&)
 inline std::ostream& operator << (std::ostream& os, const number<Backend, ExpressionTemplates>& r)
                      ^
/usr/include/boost/multiprecision/number.hpp:1652:22: note:   template argument deduction/substitution failed:
prog.cpp:8:29: note:   cannot convert 'number' (type 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}') to type 'std::ostream& {aka std::basic_ostream<char>&}'
  auto leftShift = number << ten;  // fail
                             ^
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2074:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/et_ops.hpp:606:7: note: candidate: template<class tag, class Arg1, class Arg2, class Arg3, class Arg4, class I> typename boost::enable_if_c<(boost::is_integral<I>::value && (boost::multiprecision::number_category<typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type>::value == number_kind_integer)), boost::multiprecision::detail::expression<boost::multiprecision::detail::shift_left, boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>, I> >::type boost::multiprecision::operator<<(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>&, const I&)
       operator << (const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& a, const I& b)
       ^
/usr/include/boost/multiprecision/detail/et_ops.hpp:606:7: note:   template argument deduction/substitution failed:
prog.cpp:8:29: note:   'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' is not derived from 'const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>'
  auto leftShift = number << ten;  // fail
                             ^
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2074:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/et_ops.hpp:599:4: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::detail::expression<boost::multiprecision::detail::shift_left, boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>, I> >::type boost::multiprecision::operator<<(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>&, const I&)
    operator << (const number<B, et_on>& a, const I& b)
    ^
/usr/include/boost/multiprecision/detail/et_ops.hpp:599:4: note:   template argument deduction/substitution failed:
prog.cpp:8:29: note:   template argument '(boost::multiprecision::expression_template_option)0u' does not match '#'integer_cst' not supported by dump_decl#<declaration error>'
  auto leftShift = number << ten;  // fail
                             ^
prog.cpp:8:29: note:   'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' is not derived from 'const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>'
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2073:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:601:4: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator<<(boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&&, const I&)
    operator << (number<B, et_off>&& a, const I& b)
    ^
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:601:4: note:   template argument deduction/substitution failed:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp: In substitution of 'template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator<<(boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&&, const I&) [with B = boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void>; I = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >]':
prog.cpp:8:29:   required from here
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:601:4: error: no type named 'type' in 'struct boost::enable_if_c<false, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> > >'
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:274:4: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator<<(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&, const I&)
    operator << (const number<B, et_off>& a, const I& b)
    ^
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:274:4: note:   template argument deduction/substitution failed:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp: In substitution of 'template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator<<(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&, const I&) [with B = boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void>; I = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >]':
prog.cpp:8:29:   required from here
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:274:4: error: no type named 'type' in 'struct boost::enable_if_c<false, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> > >'
prog.cpp:9:27: error: no match for 'operator>>' (operand types are 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' and 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}')
  auto rightShift = number >> ten; // fail
                           ^
prog.cpp:9:27: note: candidate: operator>>(int, int) <built-in>
prog.cpp:9:27: note:   no known conversion for argument 2 from 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' to 'int'
In file included from /usr/include/boost/multiprecision/cpp_int.hpp:12:0,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/number.hpp:1681:22: note: candidate: template<class Backend, boost::multiprecision::expression_template_option ExpressionTemplates> std::istream& boost::multiprecision::operator>>(std::istream&, boost::multiprecision::number<Backend, ExpressionTemplates>&)
 inline std::istream& operator >> (std::istream& is, number<Backend, ExpressionTemplates>& r)
                      ^
/usr/include/boost/multiprecision/number.hpp:1681:22: note:   template argument deduction/substitution failed:
prog.cpp:9:30: note:   cannot convert 'number' (type 'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}') to type 'std::istream& {aka std::basic_istream<char>&}'
  auto rightShift = number >> ten; // fail
                              ^
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2074:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/et_ops.hpp:624:7: note: candidate: template<class tag, class Arg1, class Arg2, class Arg3, class Arg4, class I> typename boost::enable_if_c<(boost::is_integral<I>::value && (boost::multiprecision::number_category<typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type>::value == number_kind_integer)), boost::multiprecision::detail::expression<boost::multiprecision::detail::shift_right, boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>, I> >::type boost::multiprecision::operator>>(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>&, const I&)
       operator >> (const detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& a, const I& b)
       ^
/usr/include/boost/multiprecision/detail/et_ops.hpp:624:7: note:   template argument deduction/substitution failed:
prog.cpp:9:30: note:   'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' is not derived from 'const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>'
  auto rightShift = number >> ten; // fail
                              ^
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2074:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/et_ops.hpp:616:7: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::detail::expression<boost::multiprecision::detail::shift_right, boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>, I> >::type boost::multiprecision::operator>>(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>&, const I&)
       operator >> (const number<B, et_on>& a, const I& b)
       ^
/usr/include/boost/multiprecision/detail/et_ops.hpp:616:7: note:   template argument deduction/substitution failed:
prog.cpp:9:30: note:   template argument '(boost::multiprecision::expression_template_option)0u' does not match '#'integer_cst' not supported by dump_decl#<declaration error>'
  auto rightShift = number >> ten; // fail
                              ^
prog.cpp:9:30: note:   'uint128_t {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' is not derived from 'const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)1u>'
In file included from /usr/include/boost/multiprecision/detail/default_ops.hpp:2073:0,
                 from /usr/include/boost/multiprecision/detail/generic_interconvert.hpp:9,
                 from /usr/include/boost/multiprecision/number.hpp:22,
                 from /usr/include/boost/multiprecision/cpp_int.hpp:12,
                 from prog.cpp:1:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:609:4: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator>>(boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&&, const I&)
    operator >> (number<B, et_off>&& a, const I& b)
    ^
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:609:4: note:   template argument deduction/substitution failed:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp: In substitution of 'template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator>>(boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&&, const I&) [with B = boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void>; I = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >]':
prog.cpp:9:30:   required from here
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:609:4: error: no type named 'type' in 'struct boost::enable_if_c<false, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> > >'
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:284:4: note: candidate: template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator>>(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&, const I&)
    operator >> (const number<B, et_off>& a, const I& b)
    ^
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:284:4: note:   template argument deduction/substitution failed:
/usr/include/boost/multiprecision/detail/no_et_ops.hpp: In substitution of 'template<class B, class I> typename boost::enable_if_c<(boost::is_integral<Arithmetic>::value && (boost::multiprecision::number_category<Num>::value == number_kind_integer)), boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u> >::type boost::multiprecision::operator>>(const boost::multiprecision::number<B, (boost::multiprecision::expression_template_option)0u>&, const I&) [with B = boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void>; I = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >]':
prog.cpp:9:30:   required from here
/usr/include/boost/multiprecision/detail/no_et_ops.hpp:284:4: error: no type named 'type' in 'struct boost::enable_if_c<false, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<128u, 128u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> > >'
stdout
Standard output is empty