使用const
,如注释所示,msvc 11 和 g++ 4.7.0 拒绝编译:
#include <memory> // std::unique_ptr
#include <utility> // std::move
using namespace std;
struct CommandLineArgs
{
typedef unique_ptr<
wchar_t const* const [],
void(*)( wchar_t const* const* )
> PointerArray;
//PointerArray const args; // Oops
PointerArray args;
int const count;
static wchar_t const* const* parsed(
wchar_t const commandLine[],
int& count
)
{
return 0;
}
static void deallocate( wchar_t const* const* const p )
{
}
CommandLineArgs(
wchar_t const commandLine[] = L"",
int _ = 0
)
: args( parsed( commandLine, _ ), &deallocate )
, count( _ )
{}
CommandLineArgs( CommandLineArgs&& other )
: args( move( other.args ) )
, count( move( other.count ) )
{}
};
int main()
{}
错误消息似乎不是特别有用,但这里是 g++ 的输出:
main.cpp:在构造函数“CommandLineArgs::CommandLineArgs(CommandLineArgs&&)”中: main.cpp:38:38:错误:使用已删除的函数 'std::unique_ptr::unique_ptr(const std::unique_ptr&) [w i _Tp = 常量 wchar_t* 常量;_Dp = void (*)(const wchar_t* const*); std::unique_ptr = std::unique_ptr]' 在 c:\program files (x86)\mingw\bin\../lib/gcc/mingw32/4.7.0/include/c++/memory:86:0 包含的文件中, 来自 main.cpp:1: c:\program files (x86)\mingw\bin\../lib/gcc/mingw32/4.7.0/include/c++/bits/unique_ptr.h:402:7:错误:在此声明
为什么?