Pytania otagowane jako c++-concepts

5
Dlaczego wymagamy wymagań?
Jednym z rogów koncepcji C ++ 20 jest to, że są pewne sytuacje, w których musisz pisać requires requires. Na przykład ten przykład z [wyr.prim.req] / 3 : Wymaga ekspresja może być również stosowany w wymaga-klauzula ([temp]) jako sposób pisania ograniczenia ad hoc dotyczący argumentów szablonu, takich jak ten poniżej: …
161 c++  c++-concepts  c++20 


3
C ++ 20 Pojęcia: Którą specjalizację szablonu wybiera się, gdy argument szablonu kwalifikuje się do wielu pojęć?
Dany : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> …

1
Czy `equality_comparable_with` wymaga wymagania` common_reference`?
Koncepcjaequality_­comparable_with<T, U> ma zadeklarować, że obiekty typu Ti Umożna porównać sobie równe, a jeśli są, to ma oczekiwaną znaczenie. W porządku. Jednak ta koncepcja również musi common_reference_t<T&, U&>istnieć. Głównym impulsem common_referencei towarzyszącą mu funkcją wydaje się być umożliwienie iteratorom proxy , aby mieć miejsce do reprezentowania relacji między takimi iteratorami …

1
Sprawdzanie koncepcji TS ignoruje modyfikator dostępu prywatnego
Chcę napisać pojęcie Indeksowalne, co oznacza, że ​​sekwencja ma początek / koniec, który zwraca RandomAccessIterator, lub operator [] jest zdefiniowany i zwraca wartość typu nieważnego. Wykorzystałem pomysły z artykułu Stroustrupa dotyczące koncepcji Sekwencji i rozszerzyłem je o: template <class T> concept bool Indexable = Sequence<T> || requires(T t, size_t n) …
10 c++  c++-concepts 

1
Czy dozwolone wyrażenia mogą „wychwytywać” zmienne obejmującego zakres?
W poniższym przykładzie argumenty funkcji są używane do testowania wymaganym wyrażeniem, czy wyrażenie, które ich używa, jest poprawnie utworzone. Wymagane wyrażenie nie przyjmuje żadnych argumentów; wykorzystuje bezpośrednio zmienne w zakresie funkcji: #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.