#include<type_traits>
#include<array>
namespace detail {enum class enabler {};}
using SInd = unsigned;
using Num = double;
template<SInd nd> using NumA = std::array<Num,nd>;
template<class C, class T = int>
using EnableIf = typename std::enable_if<C::value, T>::type;
template<class T, T a, T b> struct equal : std::integral_constant<bool, a == b> {};
struct x {};
template<SInd nd, EnableIf<equal<SInd,nd,2>>... >
NumA<nd> vector(x,Num d,Num off){ return NumA<nd>{d,off}; }
template<SInd nd, EnableIf<equal<SInd,nd,3>>... >
NumA<nd> vector(x,Num d,Num off){ return NumA<nd>{d,off,off}; }
template<SInd nd, class edg> NumA<nd> center(edg) {
static_assert(nd == 3, "ok1");
static_assert(nd == 3 && equal<SInd,nd,3u>::value, "ok2");
static_assert(!equal<SInd,nd,2u>::value, "ok3");
static_assert( (nd == 2 && equal<SInd,nd,2u>::value)
|| (nd == 3 && equal<SInd,nd,3u>::value),
"something went wrong");
return vector<nd>(edg(),1.0,1.0);
}
int main() {
static const SInd nd = 3;
center<nd>(x());
}
I2luY2x1ZGU8dHlwZV90cmFpdHM+CiNpbmNsdWRlPGFycmF5PgoKbmFtZXNwYWNlIGRldGFpbCB7ZW51bSBjbGFzcyBlbmFibGVyIHt9O30KdXNpbmcgU0luZCA9IHVuc2lnbmVkOwp1c2luZyBOdW0gPSBkb3VibGU7CnRlbXBsYXRlPFNJbmQgbmQ+IHVzaW5nIE51bUEgPSBzdGQ6OmFycmF5PE51bSxuZD47Cgp0ZW1wbGF0ZTxjbGFzcyBDLCBjbGFzcyBUID0gaW50Pgp1c2luZyBFbmFibGVJZiA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEM6OnZhbHVlLCBUPjo6dHlwZTsKCnRlbXBsYXRlPGNsYXNzIFQsIFQgYSwgVCBiPiBzdHJ1Y3QgZXF1YWwgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIGEgPT0gYj4ge307CgpzdHJ1Y3QgeCB7fTsKCnRlbXBsYXRlPFNJbmQgbmQsIEVuYWJsZUlmPGVxdWFsPFNJbmQsbmQsMj4+Li4uID4KTnVtQTxuZD4gdmVjdG9yKHgsTnVtIGQsTnVtIG9mZil7IHJldHVybiBOdW1BPG5kPntkLG9mZn07IH0KdGVtcGxhdGU8U0luZCBuZCwgRW5hYmxlSWY8ZXF1YWw8U0luZCxuZCwzPj4uLi4gPgpOdW1BPG5kPiB2ZWN0b3IoeCxOdW0gZCxOdW0gb2ZmKXsgcmV0dXJuIE51bUE8bmQ+e2Qsb2ZmLG9mZn07IH0KCnRlbXBsYXRlPFNJbmQgbmQsIGNsYXNzIGVkZz4gTnVtQTxuZD4gY2VudGVyKGVkZykgewogIHN0YXRpY19hc3NlcnQobmQgPT0gMywgIm9rMSIpOwogIHN0YXRpY19hc3NlcnQobmQgPT0gMyAmJiBlcXVhbDxTSW5kLG5kLDN1Pjo6dmFsdWUsICJvazIiKTsKICBzdGF0aWNfYXNzZXJ0KCFlcXVhbDxTSW5kLG5kLDJ1Pjo6dmFsdWUsICJvazMiKTsKICBzdGF0aWNfYXNzZXJ0KCAobmQgPT0gMiAmJiBlcXVhbDxTSW5kLG5kLDJ1Pjo6dmFsdWUpCiAgICAgICAgICAgICAgICAgfHwgKG5kID09IDMgJiYgZXF1YWw8U0luZCxuZCwzdT46OnZhbHVlKSwKICAgICAgICAgICAgICAgICAic29tZXRoaW5nIHdlbnQgd3JvbmciKTsKCiAgcmV0dXJuIHZlY3RvcjxuZD4oZWRnKCksMS4wLDEuMCk7Cn0KCgppbnQgbWFpbigpIHsKCiAgc3RhdGljIGNvbnN0IFNJbmQgbmQgPSAzOwogCiAgY2VudGVyPG5kPih4KCkpOwp9