我有以下代码:
class C {
private:
void *data;
public:
constexpr C(nullptr_t) : data(nullptr) { }
C(int i) : data(new int(i)) { }
};
我创建了一个带nullptr_t
的构造函数,因此我可以使用类似于以下代码:
C foo(2);
// ...
foo = nullptr;
类似于此的代码以前在MSVC上有效,但是此代码无法在-std=c++14
和C(nullptr_t)
的右括号上使用GCC 5.3.1(使用error: function definition does not declare parameters
)进行编译。即使我给参数命名(在这种情况下为_
),我也得到error: expected ')' before '_'
。如果删除constexpr
关键字,这也会失败。
为什么我无法声明这样的构造函数,以及可能的解决方法是什么?
答案 0 :(得分:1)
您必须是“使用命名空间std”和just got tripped up by it:
的粉丝constexpr C(std::nullptr_t) : data(nullptr) { }
gcc 5.3.1在--std=c++14
一致性级别编译:
[mrsam@octopus tmp]$ cat t.C
#include <iostream>
class C {
private:
void *data;
public:
constexpr C(std::nullptr_t) : data(nullptr) { }
C(int i) : data(new int(i)) { }
};
[mrsam@octopus tmp]$ g++ -g -c --std=c++14 -o t.o t.C
[mrsam@octopus tmp]$ g++ --version
g++ (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.