Skip to content

Latest commit

 

History

History
131 lines (83 loc) · 2.22 KB

concepts.md

File metadata and controls

131 lines (83 loc) · 2.22 KB

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