#include <iostream>
#include <string>
namespace some_package {
class type {
long code_;
public:
constexpr type(long code):
code_(code)
{}
constexpr auto code() const {
return code_;
}
friend std::string to_string(type const &t) {
return std::to_string(t.code());
}
struct constants;
};
struct type::constants {
static constexpr type type1 = type(1);
static constexpr type type2 = type(2);
/* etc */
};
}
int main() {
std::cout << to_string(some_package::type::constants::type1);
std::cout << some_package::type::constants::type2.code();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKbmFtZXNwYWNlIHNvbWVfcGFja2FnZSB7CgljbGFzcyB0eXBlIHsKCQlsb25nIGNvZGVfOwoJcHVibGljOgoJCWNvbnN0ZXhwciB0eXBlKGxvbmcgY29kZSk6CgkJCWNvZGVfKGNvZGUpCgkJe30KCQkKCQljb25zdGV4cHIgYXV0byBjb2RlKCkgY29uc3QgewoJCQlyZXR1cm4gY29kZV87CgkJfQoJCQoJCWZyaWVuZCBzdGQ6OnN0cmluZyB0b19zdHJpbmcodHlwZSBjb25zdCAmdCkgewoJCQlyZXR1cm4gc3RkOjp0b19zdHJpbmcodC5jb2RlKCkpOwoJCX0KCQkKCQlzdHJ1Y3QgY29uc3RhbnRzOwoJfTsKCQoJc3RydWN0IHR5cGU6OmNvbnN0YW50cyB7CgkJc3RhdGljIGNvbnN0ZXhwciB0eXBlIHR5cGUxID0gdHlwZSgxKTsKCQlzdGF0aWMgY29uc3RleHByIHR5cGUgdHlwZTIgPSB0eXBlKDIpOwoJCS8qIGV0YyAqLwoJfTsKfQoKCmludCBtYWluKCkgewoJc3RkOjpjb3V0IDw8IHRvX3N0cmluZyhzb21lX3BhY2thZ2U6OnR5cGU6OmNvbnN0YW50czo6dHlwZTEpOwoJc3RkOjpjb3V0IDw8IHNvbWVfcGFja2FnZTo6dHlwZTo6Y29uc3RhbnRzOjp0eXBlMi5jb2RlKCk7CglyZXR1cm4gMDsKfQ==