在Modern C++ Design第二章第一节,有一个关于定制编译器错误提示的例子:
template
<
bool
>
struct
CompileTimeChecker
{
CompileTimeChecker(...); // 一个接受任何参数的构造函数
};
template <> struct CompileTimeChecker < false > { }; // 特化false版本
// 定义一个宏,msg为用户传入的错误消息提示,expr为判断式,expr为false时编译期将出
// 错,并显示错误信息。
#define STATIC_CHECK(expr, msg)/
{/
class ERROR_##msg{};/
( void ) sizeof (CompileTimeChecker < (expr) != 0 > (ERROR_##msg()));/
}
{
CompileTimeChecker(...); // 一个接受任何参数的构造函数
};
template <> struct CompileTimeChecker < false > { }; // 特化false版本
// 定义一个宏,msg为用户传入的错误消息提示,expr为判断式,expr为false时编译期将出
// 错,并显示错误信息。
#define STATIC_CHECK(expr, msg)/
{/
class ERROR_##msg{};/
( void ) sizeof (CompileTimeChecker < (expr) != 0 > (ERROR_##msg()));/
}