0_0_37881712_7536.cpp:12:33: error: 'enable_if_t' does not name a type
template<typename T,typename=enable_if_t<numeric_limits<T>::is_integer>>
^
0_0_37881712_7536.cpp:12:44: error: expected '>' before '<' token
template<typename T,typename=enable_if_t<numeric_limits<T>::is_integer>>
^
0_0_37881712_7536.cpp: In static member function 'static constexpr void mint::fix(int&)':
0_0_37881712_7536.cpp:11:26: error: invalid return type 'void' of constexpr function 'static constexpr void mint::fix(int&)'
static constexpr void fix(int &x) { x+=(x>>31)&P; }
^
0_0_37881712_7536.cpp: In member function 'constexpr mint& mint::set(const int&) const':
0_0_37881712_7536.cpp:14:48: error: assignment of member 'mint::x' in read-only object
constexpr mint& set(const int &o) { return x=o, *this; }
^
0_0_37881712_7536.cpp:14:53: error: invalid initialization of reference of type 'mint&' from expression of type 'const mint'
constexpr mint& set(const int &o) { return x=o, *this; }
^
0_0_37881712_7536.cpp:14:59: error: body of constexpr function 'constexpr mint& mint::set(const int&) const' not a return-statement
constexpr mint& set(const int &o) { return x=o, *this; }
^
0_0_37881712_7536.cpp: In member function 'constexpr mint& mint::operator+=(const mint&) const':
0_0_37881712_7536.cpp:16:62: error: assignment of member 'mint::x' in read-only object
constexpr mint& operator += (const mint &y) { return fix(x+=y.x-P), *this; }
^
0_0_37881712_7536.cpp:16:69: error: no matching function for call to 'mint::fix(const int&) const'
constexpr mint& operator += (const mint &y) { return fix(x+=y.x-P), *this; }
^
0_0_37881712_7536.cpp:16:69: note: candidate is:
0_0_37881712_7536.cpp:11:26: note: static constexpr void mint::fix(int&)
static constexpr void fix(int &x) { x+=(x>>31)&P; }
^
0_0_37881712_7536.cpp:11:26: note: no known conversion for argument 1 from 'const int' to 'int&'
0_0_37881712_7536.cpp:16:79: error: body of constexpr function 'constexpr mint& mint::operator+=(const mint&) const' not a return-statement
constexpr mint& operator += (const mint &y) { return fix(x+=y.x-P), *this; }
^
0_0_37881712_7536.cpp: In member function 'constexpr mint& mint::operator-=(const mint&) const':
0_0_37881712_7536.cpp:18:62: error: assignment of member 'mint::x' in read-only object
constexpr mint& operator -= (const mint &y) { return fix(x-=y.x), *this; }
^
0_0_37881712_7536.cpp:18:67: error: no matching function for call to 'mint::fix(const int&) const'
constexpr mint& operator -= (const mint &y) { return fix(x-=y.x), *this; }
^
0_0_37881712_7536.cpp:18:67: note: candidate is:
0_0_37881712_7536.cpp:11:26: note: static constexpr void mint::fix(int&)
static constexpr void fix(int &x) { x+=(x>>31)&P; }
^
0_0_37881712_7536.cpp:11:26: note: no known conversion for argument 1 from 'const int' to 'int&'
0_0_37881712_7536.cpp:18:77: error: body of constexpr function 'constexpr mint& mint::operator-=(const mint&) const' not a return-statement
constexpr mint& operator -= (const mint &y) { return fix(x-=y.x), *this; }
^
0_0_37881712_7536.cpp: In member function 'constexpr mint mint::operator*(const mint&) const':
0_0_37881712_7536.cpp:20:119: error: could not convert 'std::move<long long int>((* &(((long long int)((const mint*)this)->mint::x) * ((long long int)y.mint::x))))' from 'std::remove_reference<long long int>::type {aka long long int}' to 'mint'
constexpr mint operator * (const mint &y) const { return move(static_cast<long long>(x)*static_cast<long long>(y.x)); }
^
0_0_37881712_7536.cpp:20:122: error: body of constexpr function 'constexpr mint mint::operator*(const mint&) const' not a return-statement
constexpr mint operator * (const mint &y) const { return move(static_cast<long long>(x)*static_cast<long long>(y.x)); }
^
0_0_37881712_7536.cpp: In member function 'constexpr mint& mint::operator*=(const mint&) const':
0_0_37881712_7536.cpp:21:62: error: passing 'const mint' as 'this' argument of 'mint& mint::operator=(mint&&)' discards qualifiers [-fpermissive]
constexpr mint& operator *= (const mint &y) { return *this=*this*y; }
^
0_0_37881712_7536.cpp:21:69: error: invalid initialization of reference of type 'mint&' from expression of type 'const mint'
constexpr mint& operator *= (const mint &y) { return *this=*this*y; }
^
0_0_37881712_7536.cpp:21:72: error: body of constexpr function 'constexpr mint& mint::operator*=(const mint&) const' not a return-statement
constexpr mint& operator *= (const mint &y) { return *this=*this*y; }
^
0_0_37881712_7536.cpp: In instantiation of 'constexpr mint mint::pow(auto:1) const [with auto:1 = int]':
0_0_37881712_7536.cpp:23:52: required from here
0_0_37881712_7536.cpp:22:139: error: body of constexpr function 'constexpr mint mint::pow(auto:1) const [with auto:1 = int]' not a return-statement
constexpr mint pow(auto b) const { assert(x>0); mint a(*this),res(move(mint().set(1))); for(;b;b>>=1,a*=a) if(b&1) res*=a; return res; }
^
0_0_37881712_7536.cpp: At global scope:
0_0_37881712_7536.cpp:34:27: error: could not convert '1' from 'int' to 'mint'
const mat I={{{1,0},{0,1}}},T={{{2,1},{1,1}}};
^
0_0_37881712_7536.cpp:34:27: error: could not convert '0' from 'int' to 'mint'
0_0_37881712_7536.cpp:34:27: error: could not convert '0' from 'int' to 'mint'
0_0_37881712_7536.cpp:34:27: error: could not convert '1' from 'int' to 'mint'
0_0_37881712_7536.cpp:34:45: error: could not convert '2' from 'int' to 'mint'
const mat I={{{1,0},{0,1}}},T={{{2,1},{1,1}}};
^
0_0_37881712_7536.cpp:34:45: error: could not convert '1' from 'int' to 'mint'
0_0_37881712_7536.cpp:34:45: error: could not convert '1' from 'int' to 'mint'
0_0_37881712_7536.cpp:34:45: error: could not convert '1' from 'int' to 'mint'
0_0_37881712_7536.cpp: In function 'int main()':
0_0_37881712_7536.cpp:104:21: error: could not convert '0' from 'int' to 'mint'
vec x=(vec{0,1})*calc(ban[0].first-1);
^
0_0_37881712_7536.cpp:104:21: error: could not convert '1' from 'int' to 'mint'
0_0_37881712_7536.cpp:108:23: error: could not convert '1' from 'int' to 'mint'
vec x=vec{1,0}*calc(ban[i].first-ban[i-1].second-1);
^
0_0_37881712_7536.cpp:108:23: error: could not convert '0' from 'int' to 'mint'
0_0_37881712_7536.cpp:111:16: error: could not convert '1' from 'int' to 'mint'
x=vec{1,0}*calc(n-ban[ban.size()-1].second);
^
0_0_37881712_7536.cpp:111:16: error: could not convert '0' from 'int' to 'mint'
0_0_37881712_7536.cpp: In instantiation of 'mint operator*(const auto:6&, const auto:7&) [with auto:6 = int; auto:7 = mint]':
0_0_37881712_7536.cpp:105:21: required from here
0_0_37881712_7536.cpp:28:86: error: no matching function for call to 'mint::mint(const int&)'
friend mint operator * (const auto &i,const auto &j) { return static_cast<mint>(i)*static_cast<mint>(j); }
^
0_0_37881712_7536.cpp:28:86: note: candidates are:
0_0_37881712_7536.cpp:13:17: note: template<class T, class> constexpr mint::mint(const T&)
constexpr mint(const T &o): x(o<0?o%P+P:o%P) {}
^
0_0_37881712_7536.cpp:13:17: note: template argument deduction/substitution failed:
0_0_37881712_7536.cpp:10:14: note: constexpr mint::mint()
constexpr mint(): x(0) {}
^
0_0_37881712_7536.cpp:10:14: note: candidate expects 0 arguments, 1 provided
0_0_37881712_7536.cpp:6:8: note: constexpr mint::mint(const mint&)
struct mint
^
0_0_37881712_7536.cpp:6:8: note: no known conversion for argument 1 from 'const int' to 'const mint&'
0_0_37881712_7536.cpp:6:8: note: constexpr mint::mint(mint&&)
0_0_37881712_7536.cpp:6:8: note: no known conversion for argument 1 from 'const int' to 'mint&&'
|