我试图禁止引用一个类,我已经看到一些奇怪的行为。我已经构建了一个玩具示例来展示发生了什么。如果我有这样的:static_assert是否需要使用模板参数?
template <class T>
struct something {
};
template <class T>
struct something<T&> {
static_assert(false, "reference disallowed with something");
};
int main() {
something<int> a; (void)a;
}
即使我不声明某个实例与参考,但仍然失败:
> g++ -std=c++11 foo.cc -o foo
foo.cc:7:5: error: static assertion failed: reference disallowed with something
static_assert(false, "reference disallowed with something");
^
如果我调整,以便它具有使用模板参数通过代理类,然后它的工作原理:
template <class T>
struct something {
};
template <class T>
struct something<T&> {
template <class TT> struct falsity {
static const bool value = false;
};
static_assert(falsity<T>::value, "reference disallowed with something");
};
int main() {
something<int> a; (void)a;
}
然后它工作得很好,这是预期的行为?我会认为静态断言不管是什么类的成员。
编辑:这是gcc版本4.8.2(Ubuntu的4.8.2-19ubuntu1)
简而言之:没有!试试'static_assert(false,“这是假的。”);' – 2014-11-04 01:36:12
@πάνταῥεῖ:我不确定我理解,你不认为这是预期的行为?我应该在哪里尝试你的断言? – 2014-11-04 01:44:25
_“我应该在哪里试试你的断言?”_其他地方。要点是:**它不需要使用模板参数。** – 2014-11-04 01:46:17