Editor/cpp20.cpp (37 lines of code) (raw):
#include <iostream>
#include <vector>
// Completion for C++20 keywords
const char *g() { return "dynamic initialization"; }
constexpr const char *f(bool p) {
return p ? "constant initializer" : g();
}
constinit const char *con = f(true);
// Explicit(bool)
#define LEVEL_NUM 100
constexpr bool abc(int num) {
return (num > LEVEL_NUM);
}
class Foo {
public:
explicit(abc(1)) Foo(){ abc(1);}
};
// Range-based for loop with initializer
void test() {
std::vector<int> vec = {1, 3, 5, 7, 9};
for (auto sz = vec.size(); auto item : vec) {
std::cout << --sz + item << ' ';
}
}
// Designated initializer
struct Person
{
std::string name{};
std::string surname{};
unsigned age{};
};
struct Employee : public Person
{
unsigned salary{10000};
};
int main() {
Employee emp { {.name="John", .surname="Wick", .age=40}, 5000};
std::cout << emp.name << " " << emp.surname << ": age "
<< emp.age << ", " << emp.salary << "\n";
return 0;
}