template<
typename Handler,
bool IsConst = false>
struct Signature
{
typedef std::string(Handler::*type)(int);
};
template <typename Handler>
struct Signature<Handler, true>
{
typedef std::string(Handler::*type)(int) const;
};
template <
typename Handler,
typename Signature<Handler, false>::type Operator>
struct IsImmutable
{
static const bool value = false;
};
template <
typename Handler,
typename Signature<Handler, true>::type Operator>
struct IsImmutable<Handler, Operator>
{
static const bool value = true;
};
dGVtcGxhdGU8CiAgICB0eXBlbmFtZSBIYW5kbGVyLCAKICAgIGJvb2wgSXNDb25zdCA9IGZhbHNlPgpzdHJ1Y3QgU2lnbmF0dXJlCnsKICAgIHR5cGVkZWYgc3RkOjpzdHJpbmcoSGFuZGxlcjo6KnR5cGUpKGludCk7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFuZGxlcj4Kc3RydWN0IFNpZ25hdHVyZTxIYW5kbGVyLCB0cnVlPgp7CiAgICB0eXBlZGVmIHN0ZDo6c3RyaW5nKEhhbmRsZXI6Oip0eXBlKShpbnQpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPAogICAgdHlwZW5hbWUgSGFuZGxlciwgCiAgICB0eXBlbmFtZSBTaWduYXR1cmU8SGFuZGxlciwgZmFsc2U+Ojp0eXBlIE9wZXJhdG9yPgpzdHJ1Y3QgSXNJbW11dGFibGUKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKCnRlbXBsYXRlIDwKICAgIHR5cGVuYW1lIEhhbmRsZXIsCiAgICB0eXBlbmFtZSBTaWduYXR1cmU8SGFuZGxlciwgdHJ1ZT46OnR5cGUgT3BlcmF0b3I+CnN0cnVjdCBJc0ltbXV0YWJsZTxIYW5kbGVyLCBPcGVyYXRvcj4KewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwp9Ow==