コメントで示されているようにconst
、を使用すると、msvc11および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 ith _Tp = const wchar_t * const; _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:エラー:ここで宣言されています
なんで?