microsoft / microsoft/vscode-cpptools

Intellisense fails to deduce template arguments for aliases

Offen
#8,579 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug Language Service Visual Studio
Vorherrschende Sprache
TypeScript
Sterne
6.2k
Forks
1.7k
Ø Merge
14 Std. 46 Min.
Gemergte PRs (30 T.)
61

Beschreibung

Bug type: Language Service

Describe the bug

  • OS and Version: Windows 10 Pro 21H2
  • VS Code Version: 1.63.1 (user setup) (fe719cd3e5825bf14e14182fddeb88ee8daf044f)
  • C/C++ Extension Version: 1.7.1: October 19, 2021
  • Other extensions you installed (and if the issue persists after disabling them): many, but only cpptools needed to reproduce
  • Not using ssh remote

Since C++20 (P1814R0) the compiler is supposed to be able to deduce template argruments for template aliases, so following code is legal:

template <typename T>
struct MyTemplate
{
    MyTemplate(T) { }
};

template <typename T>
using MyAlias = MyTemplate<T>;

int main()
{
    auto mt = MyTemplate(0); // intellisense OK
    auto ma = MyAlias(0); // intellisense red squiggles
    return 0;
}

The above code compiles fine using GCC 10.2.0 from mingw, specifically the current winlibs package from chocolatey.

On the line marked as // intellisense red squiggles, intellisense compains about missing arguments for template alias "My Alias" (c/c++(441)) (see (german) screenshot below)

grafik

Steps to reproduce

  1. Put above code in a new c++ project that is configured to use C++20

settings.json:

{
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
    "C_Cpp.default.cppStandard": "c++20"
}

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduzieren Sie das C++20-Beispiel des Reports in einem neuen Projekt mit der bereitgestellten settings.json und vergleichen Sie IntelliSense mit GCC 10.2.0. Untersuchen Sie die Diagnose des Sprachdienstes bei MyAlias(0); als erledigt gilt die Aufgabe, wenn die Deduktion von Template-Argumenten für den Alias keine roten Wellenunterstreichungen wegen fehlender Argumente mehr erzeugt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.