【发布时间】:2015-02-21 14:10:21
【问题描述】:
#include <type_traits>
class Test
{
public:
Test(const Test &) = delete;
Test &operator=(const Test &) = delete;
};
void fn(Test &a, const Test &b) { a = b; }
static_assert(!std::is_copy_assignable<Test>::value, "Test shouldn't be assignable");
在 MSVC 2013 Update 3 下编译此代码意外失败 static_assert,并且函数 fn 编译失败(如预期的那样。)这是矛盾的,对吧?
我是不是在滥用is_copy_assignable?是否有其他方法可以测试这种情况?
【问题讨论】:
-
您的代码中的
static_assert在哪里? -
我正在编译的代码与这里显示的完全一样。我的原始代码使用
is_copy_assignable作为enable_if中的参数,这是我为尝试诊断问题而创建的缩减。 -
en.cppreference.com/w/cpp/language/static_assert: "静态断言声明可能出现在块范围内(作为块声明)和类体内(作为成员声明)"
-
static_assert 是一个声明,它也可以在命名空间范围内使用。无论如何,在断言周围放置一个虚拟函数并没有帮助 - 它仍然断言。
标签: c++ visual-c++ c++11 visual-studio-2013