2016-12-15 2 views
2

Я пытаюсь использовать decltype лямбда в качестве параметра шаблона.Использовать dectltype лямбда в качестве параметра шаблона

auto compare = [](int a, int b){return a < b;}; 
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue; 

cppreference.com говорит, что я могу сделать именно это:

// From the cpprefernce.com 
auto cmp = [](int left, int right) { return (left^1) < (right^1);}; 
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp); 

Но когда я пытаюсь скомпилировать я получаю

src/main.cpp:22:64: error: use of deleted function ‘main()::<lambda(int, int)>::<lambda>()’ 
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue; 
                  ^
src/main.cpp:21:18: note: a lambda closure type has a deleted default constructor 
auto compare = [](int a, int b){return a < b;}; 
      ^
src/main.cpp:22:64: note: when instantiating default argument for call to std::priority_queue<_Tp, _Sequence, _Compare>::priority_queue(const _Compare&, _Sequence&&) [with _Tp = int; _Sequence = std::vector<int>; _Compare = main()::<lambda(int, int)>] 
std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue; 
                  ^

Я не понимаю, почему я не могу сделай это. Я даже не пытаюсь использовать конструктор лямбды?

+0

Я бы включил указанную лямбду в 'std :: function' в любом случае – Rerito

ответ

4

Я понял. Вы должны построить priority_queue с лямбдой.

std::priority_queue<int, std::vector<int>, decltype(compare)> my_queue(compare); 
Смежные вопросы