#include <iostream>
#include <typeinfo>
struct Demo;
static void print(Demo*) { std::cout << "none\n"; }
static void print(Demo const*) { std::cout << "const\n"; }
static void print(Demo volatile*) { std::cout << "volatile\n"; }
static void print(Demo const volatile*) { std::cout << "const volatile\n"; }
struct Demo {
void none() { print(this); }
void c() const { print(this); }
void v() volatile { print(this); }
void cv() const volatile { print(this); }
};
int main() {
Demo d;
d.none();
d.c();
d.v();
d.cv();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgpzdHJ1Y3QgRGVtbzsKCnN0YXRpYyB2b2lkIHByaW50KERlbW8qKSB7IHN0ZDo6Y291dCA8PCAibm9uZVxuIjsgfQpzdGF0aWMgdm9pZCBwcmludChEZW1vIGNvbnN0KikgeyBzdGQ6OmNvdXQgPDwgImNvbnN0XG4iOyB9CnN0YXRpYyB2b2lkIHByaW50KERlbW8gdm9sYXRpbGUqKSB7IHN0ZDo6Y291dCA8PCAidm9sYXRpbGVcbiI7IH0Kc3RhdGljIHZvaWQgcHJpbnQoRGVtbyBjb25zdCB2b2xhdGlsZSopIHsgc3RkOjpjb3V0IDw8ICJjb25zdCB2b2xhdGlsZVxuIjsgfQoKc3RydWN0IERlbW8gewoJdm9pZCBub25lKCkgeyBwcmludCh0aGlzKTsgfQoJdm9pZCBjKCkgY29uc3QgeyBwcmludCh0aGlzKTsgfQoJdm9pZCB2KCkgdm9sYXRpbGUgeyBwcmludCh0aGlzKTsgfQoJdm9pZCBjdigpIGNvbnN0IHZvbGF0aWxlIHsgcHJpbnQodGhpcyk7IH0KfTsKCmludCBtYWluKCkgewoJRGVtbyBkOwoJZC5ub25lKCk7CglkLmMoKTsKCWQudigpOwoJZC5jdigpOwp9