采用nulltpr_t:函数定义的构造函数不声明参数

时间:2016-06-22 01:59:02

标签: c++ gcc c++14 nullptr

我有以下代码:

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++14C(nullptr_t)的右括号上使用GCC 5.3.1(使用error: function definition does not declare parameters)进行编译。即使我给参数命名(在这种情况下为_),我也得到error: expected ')' before '_'。如果删除constexpr关键字,这也会失败。

为什么我无法声明这样的构造函数,以及可能的解决方法是什么?

1 个答案:

答案 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.