template<typename T>
constexpr int get(T vec) {
return vec.get();
}
struct coord {
constexpr int get() const { return x; }
int x;
};
struct foo {
struct coord2 {
constexpr int get() const { return x; }
int x;
};
constexpr static coord f = { 5 };
constexpr static int g = get(f); // works
constexpr static coord2 h = { 5 };
};
constexpr coord foo::f;
constexpr foo::coord2 foo::h;
int main()
{
constexpr static int i = get(foo::h); // doesn't work
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY29uc3RleHByIGludCBnZXQoVCB2ZWMpIHsKICByZXR1cm4gdmVjLmdldCgpOwp9CgpzdHJ1Y3QgY29vcmQgewogIGNvbnN0ZXhwciBpbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4geDsgfQogIGludCB4Owp9OwoKc3RydWN0IGZvbyB7CiAgICBzdHJ1Y3QgY29vcmQyIHsKICAgICAgY29uc3RleHByIGludCBnZXQoKSBjb25zdCB7IHJldHVybiB4OyB9CiAgICAgIGludCB4OwogICAgfTsKICAgIGNvbnN0ZXhwciBzdGF0aWMgY29vcmQgZiA9IHsgNSB9OwogICAgY29uc3RleHByIHN0YXRpYyBpbnQgZyA9IGdldChmKTsgLy8gd29ya3MKCiAgICBjb25zdGV4cHIgc3RhdGljIGNvb3JkMiBoID0geyA1IH07Cn07Cgpjb25zdGV4cHIgY29vcmQgZm9vOjpmOwpjb25zdGV4cHIgZm9vOjpjb29yZDIgZm9vOjpoOwoKaW50IG1haW4oKQp7CiAgICBjb25zdGV4cHIgc3RhdGljIGludCBpID0gZ2V0KGZvbzo6aCk7IC8vIGRvZXNuJ3Qgd29yawogICAgCn0=