template<bool> struct Range;
template<int val, typename = Range<true> >
class Param
{
public:
typedef char type;
};
template<int val>
class Param<val, Range<(0 <= val && val <= 100)> >
{
public:
typedef int type;
};
template<int val>
class Param<val, Range<(100 < val && val <= 175)> >
{
public:
typedef double type;
};
int main ()
{
Param<200>::type *p1 = new char;
Param<100>::type *p2 = new int;
Param<110>::type *p3 = new double;
}
dGVtcGxhdGU8Ym9vbD4gc3RydWN0IFJhbmdlOwoKdGVtcGxhdGU8aW50IHZhbCwgdHlwZW5hbWUgPSBSYW5nZTx0cnVlPiA+CmNsYXNzIFBhcmFtCnsKcHVibGljOgogIHR5cGVkZWYgY2hhciB0eXBlOwp9OwoKdGVtcGxhdGU8aW50IHZhbD4KY2xhc3MgUGFyYW08dmFsLCBSYW5nZTwoMCA8PSB2YWwgJiYgdmFsIDw9IDEwMCk+ID4KewpwdWJsaWM6CiAgdHlwZWRlZiBpbnQgdHlwZTsKfTsKCnRlbXBsYXRlPGludCB2YWw+CmNsYXNzIFBhcmFtPHZhbCwgUmFuZ2U8KDEwMCA8IHZhbCAmJiB2YWwgPD0gMTc1KT4gPgp7CnB1YmxpYzoKICB0eXBlZGVmIGRvdWJsZSB0eXBlOwp9OwoKaW50IG1haW4gKCkKewogIFBhcmFtPDIwMD46OnR5cGUgKnAxID0gbmV3IGNoYXI7CiAgUGFyYW08MTAwPjo6dHlwZSAqcDIgPSBuZXcgaW50OwogIFBhcmFtPDExMD46OnR5cGUgKnAzID0gbmV3IGRvdWJsZTsKfQo=