#define IMPL(T, F) template<> _IMPL(T, F)
#define _IMPL(T, F) struct verify<T *> { using self = T; static self test(self it) { return self(F(it)); } }
#define IMPL(T, F) template<> _IMPL(T, F)
#define _IMPL(T, F) struct verify<T *> { using self = T; static self test(self it) { return self(F(it)); } }
Window::Window(window_type type) : Window(GTK_WINDOW(gtk_window_new(
type == window_type::TOP ? GTK_WINDOW_TOPLEVEL :
type == window_type::POPUP ? GTK_WINDOW_POPUP :
Window::Window(window_type type) : Window(GTK_WINDOW(gtk_window_new(
type == window_type::TOP ? GTK_WINDOW_TOPLEVEL :
type == window_type::POPUP ? GTK_WINDOW_POPUP :