このコードはコンパイルされません。コンパイラは「イニシャライザリスト」から「std::priority_queue<int, std::vector<_Ty, std::allocator<_Ty>>, std::less<_Ty>> &
」に変換できません。ラムダ関数内でdecltype指定子を正しく動作させることはできません
priority_queue宣言をラムダ関数に移動すると、完全にコンパイルされます。
#include <vector>
#include <queue>
int main()
{
using namespace std;
auto func = [&]()
{
priority_queue<int> que;
vector<int> vec;
que = decltype(que)(vec.begin(),vec.end());
};
func();
return 0;
}
コンパイラはvs2015コミュニティです。
:
que
はそれを修正するためにstd::remove_reference
を使用し、priority_queue<int>&
であるため、割り当てが許可されていませんか? clangでのエラーや警告はありません。 – kennytm@kennytm vs2015コミュニティ。 – iouvxz
[ideoneでうまくいく](https://ideone.com/Wm6hJX)。 –