如何编译时断言没有C 11

前端之家收集整理的这篇文章主要介绍了如何编译时断言没有C 11前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在求职面试中,我被要求写一个元功能
确定一个类型是一个指针.这是
我提出了什么
template <typename T>
struct is_pointer
{ static const bool value = false; }

template <typename T>
struct is_pointer<T *>
{ static const bool value = true; }

然后我被要求写一个Meta-assert,这将失败
在编译期间如果我的is_pointer函数不是
做正确的事情

当我使用static_assert时,他明确告诉我
我只能使用C98标准.我该如何实现?

解决方法

在你的情况下
template <bool> struct assert;
template <> struct assert<true> {};

解决这个问题:

assert<!is_pointer<char>::value>();     // valid
assert<is_pointer<char *>::value>();    // valid

assert<is_pointer<char>::value>();      // compilation error:
                                        // use of incomplete class
原文链接:https://www.f2er.com/c/113936.html

猜你在找的C&C++相关文章