Вопросы с тегом «c++20»

C ++ 20 является целью для версии C ++ после C ++ 17. Этот тег следует использовать (вместе с тегом C ++) для вопросов о возможностях C ++ на пути к C ++ 20.


3
C ++ 20 Основные понятия: какая специализация шаблона выбирается, когда аргумент шаблона соответствует нескольким понятиям?
Данный : #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
'auto' как заполнитель аргумента шаблона для параметра функции
C ++ 20 позволяет использовать autoдля параметра типа функции. Позволяет ли он также использовать autoв качестве заполнителя аргумента шаблона (не похоже, но в духе C ++ 17 template <auto> в некотором смысле) для типа параметра функции? Итак, следующий код, предварительно C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, …
22 c++  templates  auto  c++20 

1
Использование переменной в собственном инициализаторе
[basic.scope.pdecl] / 1 стандартного черновика C ++ 20 содержал в примечании следующий (ненормативный) пример (частичная цитата до запроса на объединение 3580 , см. ответ на этот вопрос): unsigned char x = x; [...] x инициализируется своим собственным (неопределенным) значением. Это на самом деле имеет четко определенное поведение в C ++ …

2
Является ли тип POD в точности эквивалентным тривиальному типу стандартной компоновки?
В C ++ 20 концепция POD устарела, предположительно потому, что это бессмысленная составная черта тривиальности и стандартной компоновки. Однако определение POD в проекте C ++ 20 не совсем «тривиально и стандартно»; это на самом деле: Класс POD - это класс, который является как тривиальным классом, так и классом стандартной компоновки …


2
Почему концепция same_as дважды проверяет равенство типов?
Глядя на возможную реализацию концепции same_as на https://en.cppreference.com/w/cpp/concepts/same_as, я заметил, что происходит нечто странное. namespace detail { template< class T, class U > concept SameHelper = std::is_same_v<T, U>; } template< class T, class U > concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>; Первый вопрос: почему SameHelperпонятие вложено? Второе - …
19 c++  c++20  concept 

4
Непрерывное перечисление C ++ 11
Есть ли способ проверить в C ++ 11, является ли перечисление непрерывным ? Полностью допустимо указывать значения enum, которых нет. Есть ли такая особенность, как черта типа в C ++ 14, C ++ 17 или, может быть, C ++ 20, чтобы проверить, является ли enum непрерывным? Это будет использоваться в …
17 c++  c++11  c++14  c++17  c++20 

1
Почему стандарт C ++ обрабатывает файл в поисках так, как он это делает?
C ++ использует streamoffтип для представления смещения внутри (файлового) потока и определяется следующим образом в [stream.types]: using streamoff = implementation-defined ; Тип streamoff является синонимом одного из подписанных базовых целочисленных типов достаточного размера, чтобы представить максимально возможный размер файла для операционной системы. 287) 287) Обычно длинные длинные. Это имеет смысл, …


2
[[no_unique_address]] и два значения элемента одного типа
Я играю с [[no_unique_address]]в c++20. В примере на cppreference у нас есть пустой тип Emptyи типZ struct Empty {}; // empty class struct Z { char c; [[no_unique_address]] Empty e1, e2; }; Видимо, размер Zдолжен быть хотя бы 2потому, что типы e1и e2одинаковы. Тем не менее, я действительно хочу иметь …

1
Почему функция conteval допускает неопределенное поведение?
В C ++ есть очень удобное свойство константных выражений: их оценка не может иметь неопределенного поведения ( 7.7.4.7 ): Выражение e является основным константным выражением, если при вычислении e, следуя правилам абстрактной машины ([intro.execution]), не будет выполнено одно из следующих действий: ... операция, которая будет иметь неопределенное поведение, как указано …

2
Почему std :: swap не помечен как constexpr до C ++ 20?
В C ++ 20 std::swapстановится constexprфункцией. Я знаю, что стандартная библиотека действительно отстала от языка в маркировке вещей constexpr, но к 2017 году <algorithm>была в значительной степени консекстом, как и куча других вещей. Пока - std::swapнет. Я смутно помню, что был какой-то странный дефект языка, который мешал этой маркировке, но …

2
Действительно ли хранилище std :: chrono :: years по крайней мере 17 бит?
Из cppreference std::chrono::years (since C++20) duration</*signed integer type of at least 17 bits*/, std::ratio<31556952>> Используя libc++это кажется , подчеркивающее хранение std::chrono::yearsIS , shortкоторый подписанная 16 бит . std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB Есть ли опечатка на cppreference или что-то …
14 c++  chrono  c++20  libc++ 

1
если constexpr - почему отвергнутая выписка полностью проверена?
Я возился с C ++ 20 Conteval в GCC 10 и написал этот код #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return std::nullopt; …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.