#pragma once #include #include #include namespace creeper { template concept widget_trait = std::convertible_to; template concept widget_pointer_trait = std::convertible_to; template concept layout_trait = std::convertible_to; template concept layout_pointer_trait = std::convertible_to; template concept item_trait = widget_trait || layout_trait; template concept linear_trait = requires(T t) { { t.addWidget(std::declval(), int {}, Qt::AlignCenter) }; { t.addLayout(std::declval(), int {}) }; }; template concept stacked_trait = requires(T t) { {t.addWidget(std::declval())}; {t.insertWidget(int {}, std::declval())}; }; template concept area_trait = requires(T t) { { t.setWidget(std::declval()) }; { t.setLayout(std::declval()) }; }; template concept selectable_trait = requires(T t) { { std::as_const(t).selected() } -> std::convertible_to; { t.set_selected(bool {}) }; }; }