Ranges require exception to F.19
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Documentazione
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
Inizia esaminando la linea guida F.19 e l'esempio di C++20 Ranges nell'issue, quindi analizza il testo circostante della linea guida per capire come vengono espresse le eccezioni. Il lavoro sarà considerato concluso quando si sarà raggiunta una formulazione condivisa che copra chiaramente le forwarding reference utilizzate dai ranges senza std::forward non necessario, preservando al contempo l'intento di F.19.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I noticed F.19: For “forward” parameters, pass by TP&& and only std::forward the parameter when my code triggered cppcoreguidelines-missing-std-forward in clang-tidy.
As Nicolai Josuttis and Arthur O'Dwyer mentioned, “If you see code using (deduced) T&& without std::forward<T>, it’s either buggy or it’s C++20 Ranges.” Yes, ranges code often requires a forwarding reference without needing to forward it. The range object may be modified during the iteration, so we cannot capture it with const T&. It can be an rvalue, so we cannot use T& either. Only T&& is viable. However, forwarding it often does no good at all, as shown by the example below:
#include <iostream>
#include <ranges>
#include <vector>
template <typename Rng>
void Access(Rng&& rng)
{
for (const auto& item : rng) {
std::cout << item << '\n';
}
}
int main()
{
std::vector vec{1, 2, 3, 4, 5, 6};
Access(vec | std::views::filter([](int n) { return n % 2 == 0; }));
}
Forwarding rng (anyone wants to write for (const auto& item : std::forward<Rng>(rng))?) is weird, useless, and unnecessary. Doing so would probably cause more confusion: Why forwarding it here? What good does it do?
So I believe an exception should be added to F.19.
- Lingua principale
- CSS
- Stelle
- 45.3k
- Fork
- 5.6k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di isocpp/CppCoreGuidelines
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 75/100
isocpp/CppCoreGuidelines#2338 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
isocpp/CppCoreGuidelines#2205 · 8 commenti ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 64/100
isocpp/CppCoreGuidelines#1649 · 3 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
isocpp/CppCoreGuidelines#2336 · 4 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
isocpp/CppCoreGuidelines#2335 · 2 commenti ·
Tutte le issue di isocpp/CppCoreGuidelines
Issue simili
-
sync-en
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
community-request
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
NVIDIA-NeMo/Curator#2464 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue hacktoberfest
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
elnachto/laya-triage#5 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
[integration]: InferrailApertaexternal
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
langchain-ai/docs#6328 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno