#include <type_traits>
struct List {};
struct Tree {};
template<typename Appl, typename StoredData>
class Box {
static_assert(
std::is_same<Appl, List>::value && std::is_same<StoredData, double>::value ||
std::is_same<Appl, Tree>::value && std::is_same<StoredData, int>::value,
"Bad parameters"
);
};
int main() {
Box<List, double> b1;
Box<Tree, int> b2;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IExpc3Qge307CnN0cnVjdCBUcmVlIHt9OwoKdGVtcGxhdGU8dHlwZW5hbWUgQXBwbCwgdHlwZW5hbWUgU3RvcmVkRGF0YT4KICAgIGNsYXNzIEJveCB7CiAgICAgICAgc3RhdGljX2Fzc2VydCgKICAgICAgICAgICAgc3RkOjppc19zYW1lPEFwcGwsIExpc3Q+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3NhbWU8U3RvcmVkRGF0YSwgZG91YmxlPjo6dmFsdWUgfHwKICAgICAgICAgICAgc3RkOjppc19zYW1lPEFwcGwsIFRyZWU+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3NhbWU8U3RvcmVkRGF0YSwgaW50Pjo6dmFsdWUsCiAgICAgICAgICAgICJCYWQgcGFyYW1ldGVycyIKICAgICAgICApOwogICAgfTsKCmludCBtYWluKCkgewoJQm94PExpc3QsIGRvdWJsZT4gYjE7CglCb3g8VHJlZSwgaW50PiBiMjsKfQ==