Bonjour,
J’ai récemment commencer l’étude du C++. Voulant être le plus "à la page" possible, je me suis dit qu’il serait intéressant de consulter la version bêta du tutoriel "La programmation en C++ moderne " afin d’avoir quelques notions apportées par la norme c++20.
j’en suis arrivé au chapitre II.3 : Des fonctions somme toute lambdas et j’ai un souci avec l’utilisation de std::views::take_while
.
Voici le code complet, tiré directement du tuto :
#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
int main()
{
std::vector<int> const nombres { 2, 4, 8, -98, 7, 61, -54, 3 };
auto carres_pairs = nombres
| std::views::filter([](int n) -> bool { return n % 2 == 0; })
| std::views::transform([](int n) -> int { return n * n; })
| std::views::take_while([](int n) -> bool { return n < 100; });
for (int nombre : carres_pairs)
{
std::cout << nombre << "\n";
}
return 0;
}
Lorsque je compile, Visual Studio me donne l’erreur suivante : C2039 - 'take_while' n’est pas membre de 'std::ranges::views’.
J’ai pourtant bien configuré Visual Studio pour c++20 comme précisé dans le tuto. D’ailleurs, si je remplace std::views::take_while
par std::views::filter
le programme compile correctement, les views sont donc reconnus.
(d’ailleurs, question annexe : quelle est la différence entre std::views::take_while
et std::views::filter
?).
Le code ci-dessus compile correctement avec Wandbox, ce qui me fait dire que ça serait plus un problème lié à Visual Studio. Je précise que j’utilise Visual Studio Community 2019 - Version 16.8.5. D’autres personnes ont-elles rencontrer ce problème ?
J’en profite également pour remercier les auteurs de ce tutoriel de c++ que je trouve très complet et agréable à lire !