#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();
}