イテレータから通常のポインタを取得しようとしていますが、取得する型に関しては非常に特殊なことが起こっています。コードを投稿するだけです。これらの2つのスニペットは互いに等しいと思いますが、間違っているかどうか教えてください。スニペットに至るまでのコードは次のとおりです。
CallbackTrigger trigger(triggerParameters);
std::set<CallbackTrigger> triggerSet;
auto result = triggerSet.insert(trigger);
スニペットA:
auto whatIGet = &(*result.first); // whatIGet is type:
// "const std::allocator<CallbackTrigger>::value_type *"
スニペットB:
auto arbitraryStep = *result.first;
auto whatIWanted = &arbitraryStep; // this is type "CallbackTrigger*"
この違いに問題があり、スニペットAでのコンパイルを拒否するコードは、ポインターをリストにプッシュしようとしたときです。
std::list<CallbackTrigger*> listing;
listing.push_back(whatIWanted); // compiles fine
listing.push_back(whatIGet); // error: "cannot convert parameter 1 from
// 'const CallbackTrigger* to 'CallbackTrigger *&&'"
ここで何が起こっているのですか?