コンパイルに失敗する次のコードスニペットがあります...そうあるべきようですが、今は回避しています。ヘルプ/提案に大いに感謝します!
#include <atomic>
#include <memory>
struct MyClass {
static void free_lock(std::atomic<int>** lck) { (*lck)->store(0); }
typedef std::unique_ptr<std::atomic<int>*, decltype(&MyClass::free_lock)> lock_scope;
static lock_scope get_lock() {
static std::atomic<int> lck(0);
int ref = 0;
return lock_scope(&lck, &MyClass::free_lock);
}
};
次のエラーメッセージはClang3.2によって報告されました
コンパイルがエラーで終了しました: source.cpp:13:23:エラー:「lock_scope」の初期化に一致するコンストラクターがありません(別名「unique_ptr *、decltype(&MyClass :: free_lock)>」) lock_scope(&lck、&MyClass :: free_lock);を返します。 ^~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:130:7:注:候補コンストラクターは実行可能ではありません:最初の引数の「std::atomic *」から「pointer」(別名「std :: atomic **」)への既知の変換はありません unique_ptr(pointer __p、 ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:125:7:注:候補コンストラクターは実行可能ではありません:最初の引数の「std::atomic *」から「pointer」(別名「std :: atomic **」)への既知の変換はありません unique_ptr(pointer __p、 ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:155:2:注:候補コンストラクターテンプレートは実行可能ではありません:単一の引数'__u'が必要ですが、2つの引数が提供されました unique_ptr(unique_ptr && __u)noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:164:2:注:候補コンストラクターテンプレートは実行可能ではありません:単一の引数'__u'が必要ですが、2つの引数が提供されました unique_ptr(auto_ptr && __u)noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:114:17:注:候補コンストラクターは実行可能ではありません: 0個の引数が必要ですが、2個が提供されました constexpr unique_ptr()noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:120:7:注:候補コンストラクターは実行可能ではありません:単一の引数'__p'が必要ですが、2つの引数が提供されました unique_ptr(pointer __p)noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:136:17:注:候補コンストラクターは実行可能ではありません: 1つの引数が必要ですが、2つ提供されました constexpr unique_ptr(nullptr_t)noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:142:7:注:候補コンストラクターは実行可能ではありません:単一の引数'__u'が必要ですが、2つの引数が提供されました unique_ptr(unique_ptr && __u)noexcept ^ /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:262:7:注:候補コンストラクターは実行可能ではありません: 1つの引数が必要ですが、2つ提供されました unique_ptr(const unique_ptr&)=削除; ^ 1つのエラーが生成されました。