Example
static_assert(-42 == -42z);
static_assert(-42 == -42Z);
static_assert(42 == 42uz);
static_assert(42 == 42uZ);
static_assert(42 == 42Uz);
static_assert(42 == 42ZU);
static_assert(42 == 42Zu);
static_assert(std::is_same_v<std::size_t, decltype(42uz)>);
Puzzle
- Can you make the following snippets compatible with 32/64 bit arch?
int main() {
std::vector v{1, 2, 3};
for (auto i = 0; i < v.size(); ++i) {
}
for (auto i = 0, s = std::size(v); i < s; ++i) {
}
std::max(0, std::ssize(v));
std::min(0, std::size(v));
std::max(0, std::min(0, v.size()));
}
Solutions
for (auto i = 0uz; i < v.size(); ++i) {
}
for (auto i = 0uz, s = std::size(v); i < s; ++i) {
}
std::max(0z, std::ssize(v));
std::min(0uz, std::size(v));
std::max(0uz, std::min(0uz, v.size()));
#include <array> // Change vector to array for elision of generated code. :)
int main() {
std::array v{1, 2, 3};
for (auto i = 0uz; i < v.size(); ++i) {
}
for (auto i = 0uz, s = std::size(v); i < s; ++i) {
}
std::max(0z, std::ssize(v));
std::min(0uz, std::size(v));
std::max(0uz, std::min(0uz, v.size()));
}
int main() {
std::vector v{1, 2, 3};
for (auto i = 0uz; i < v.size(); ++i) {
}
for (auto i = 0uz, s = std::size(v); i < s; ++i) {
}
std::max(0z, std::ssize(v));
std::min(0uz, std::size(v));
std::max(0uz, std::min(0uz, v.size()));
}
int main() {
std::vector v{1, 2, 3};
for (auto i = 0UZ; i < v.size(); ++i) {
}
for (auto i = 0UZ, s = std::size(v); i < s; ++i) {
}
std::max(0Z, std::ssize(v));
std::min(0UZ, std::size(v));
std::max(0UZ, std::min(0UZ, v.size()));
}