Open szdytom opened 1 year ago
https://github.com/atcoder/ac-library/pull/169/commits/95a6273bb67a1440dffe06687d62b13e12937abd
Strange to convert zero value to true
.
For conversion rules between bool and int types in the C++ language,
https://timsong-cpp.github.io/cppwp/n4659/conv.prom#6
A prvalue of type
bool
can be converted to a prvalue of typeint
, withfalse
becoming zero andtrue
becoming one.
https://timsong-cpp.github.io/cppwp/n4659/conv.bool#1
A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type
bool
. A zero value, null pointer value, or null member pointer value is converted tofalse
; any other value is converted totrue
. For direct-initialization, a prvalue of typestd::nullptr_t
can be converted to a prvalue of typebool
; the resulting value isfalse
.
it is preferred to make conversion function explicit unless any reason not to do so.
This is the place where we need implicit conversion. no one wants to write if ((bool)x) { ... }
anyway.
it is preferred to make conversion function explicit unless any reason not to do so.
This is the place where we need implicit conversion. no one wants to write
if ((bool)x) { ... }
anyway.
You can write if (x) { ... }
even if the conversion operator to bool is marked as explicit.
cf. https://en.cppreference.com/w/cpp/language/implicit_conversion#Contextual_conversions
This repository does not accept requests for new features.
For now, we are not planning to add new features
In this case, I don't think it's necessary because you can add a custom bool cast as shown below:
#include <atcoder/modint>
#include <bits/stdc++.h>
struct mint : public modint998244353 {
using static_modint::static_modint;
mint(modint998244353 m) : modint998244353 (m) {}
operator bool() const { return val() != 0; }
};
int main() {
mint m(123);
if (m) {
puts("not zero");
} else {
puts("zero");
}
}
It can be useful if you want something like: