Concepts. Whew, what a concept.
C++17 | C++20 |
---|---|
#include <vector>
#include <list>
#include <algorithm>
template <typename Container>
void sort(Container & c)
{
std::sort(c.begin(), c.end());
}
void test()
{
std::list ls = {3, 2, 1, 5, 4};
sortContainer(ls);
}
|
#include <vector>
#include <list>
#include <algorithm>
#include <ranges>
void sort(std::ranges::random_access_range auto & c)
{
std::sort(c.begin(), c.end());
}
void test()
{
std::list ls = { 1, 2, 3, 4, 5, 6 };
sortContainer(ls);
}
|
4375 lines of compiler error!!!
S E R I O U S L Y |
source: In function 'void test()':
source:27:21: error: no matching function for call to 'sortContainer(std::__cxx11::list&)'
27 | sortContainer(ls);
| ^
source:17:6: note: candidate: 'template<class Container, class auto:16> requires random_access_rangeauto:16 void sortContainer(auto:16&)'
17 | void sortContainer(std::ranges::random_access_range auto & c)
| ^~~~~~~~~~~~~
source:17:6: note: template argument deduction/substitution failed:
source:27:21: note: couldn't deduce template parameter 'Container'
27 | sortContainer(ls);
| ^
ASM generation compiler returned: 1
source: In function 'void test()':
source:27:21: error: no matching function for call to 'sortContainer(std::__cxx11::list&)'
27 | sortContainer(ls);
| ^
source:17:6: note: candidate: 'template<class Container, class auto:16> requires random_access_rangeauto:16 void sortContainer(auto:16&)'
17 | void sortContainer(std::ranges::random_access_range auto & c)
| ^~~~~~~~~~~~~
source:17:6: note: template argument deduction/substitution failed:
source:27:21: note: couldn't deduce template parameter 'Container'
27 | sortContainer(ls);
| ^
Execution build compiler returned: 1 |