我一直在使用 Gtkmm 编程一段时间,使用 C++11 功能没有问题。今天,我使用 C++14 特性添加了一行代码,std::make_unique
并得到了编译器错误。起初,我以为我的构建配置有问题,但经过一些测试,我将其缩小到 Gtkmm。这是在我的系统上构建良好的代码:
构建命令:
g++ -std=c++14 main.cpp
代码:
#include <memory>
int main()
{
std::unique_ptr<int> intPtr;
intPtr = std::make_unique<int>(3);
return 0;
}
如果我切换到这个构建命令:
g++ -std=c++14 main.cpp `pkg-config gtkmm-3.0 --cflags --libs`
代码不再构建。我收到以下错误:
main.cpp: In function ‘int main()’:
main.cpp:7:14: error: ‘make_unique’ is not a member of ‘std’
intPtr = std::make_unique<int>(3);
^
main.cpp:7:31: error: expected primary-expression before ‘int’
intPtr = std::make_unique<int>(3);
Gtkmm有什么问题?供您参考,我使用的是 g++ v 5.4.0 和 gtkmm 3.0。
编辑:这似乎与 C++14 无关。我尝试使用其他 C++14 功能进行构建,例如[[DEPRECATED]]
效果很好。也许只有标准库......我也尝试切换到 g++ 7 并得到了同样的错误。