VS Code cpptools 1.20 не поддерживает оператор многомерного индекса C++23 в IntelliSense. Почему?

Моя программа строится правильно в соответствии со стандартом C++, который я установил в файле CMakeLists.txt, но Intellisense помечает новые функции как ошибки, хотя я сказал ему передать информацию о конфигурации CMake.

Я использую расширения CMake и CMake-tools в VSCode, редактируя проект C++. В моей корневой папке CMakeLists.txt у меня есть set(CMAKE_CXX_STANDARD 23).

В одном из моих заголовочных файлов я использую следующую функцию C++23 (несколько аргументов в операторе фигурных скобок):

  Port *operator[](const string name, const size_t index) { /* .. code .. */ }

Как и ожидалось, я могу нормально собрать и запустить эту программу. Но Intellisense всегда помечает эту строку как ошибку, говоря, что здесь слишком много аргументов: too many parameters for this operator function C/C++(344)

Мой файл c_cpp_properties.json имеет следующее содержимое:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "intelliSenseMode": "linux-gcc-arm64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

Я также попробовал добавить "cppStandard": "c++23",, безрезультатно.

Информация о конверте

Я использую Linux на Raspberry Pi. Pi работает без головы, и я использую расширение кода SSH VS для редактирования с другого компьютера. Однако я сомневаюсь, что это повлияет на это, потому что я считаю, что расширение C/C++ работает на pi, и я вижу одно и то же, независимо от того, подключаюсь ли я удаленно с компьютера с Windows или Linux.

Intellisense — это отдельный компилятор, который иногда не реализует те же новые функции, что и «основной» компилятор. C++23 находится в стадии разработки для всех компиляторов.

BoP 17.04.2024 17:22

@Someprogrammerdude, нет, плагин cmake может переконфигурировать intellisense на основе файлов cmake, обычно вам даже не нужно создавать c_cpp_properties.json при его использовании

Alan Birtles 17.04.2024 17:30

Спасибо @BoP, Intellisense использует MSVC в качестве компилятора? Это имело бы смысл, поскольку согласно en.cppreference.com/w/cpp/compiler_support/23 этот компилятор не реализовал многие функции C++23, включая эту.

wcroughan 17.04.2024 17:47

а что если ты "compilerPath": "/usr/bin/g++"?

starball 17.04.2024 20:44

@user никакого эффекта, все равно отображается как ошибка

wcroughan 17.04.2024 21:07

@wcroughan IntelliSense использует интерфейс C++ Edison Design Group (EDG).

heap underrun 17.04.2024 23:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
112
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ в комментариях, публикуйте здесь для тех, кто столкнулся с такой же проблемой и нашел это.

Различные компиляторы и анализаторы языка реализуют функции C++ по-своему. Intellisense использует интерфейс C++ Edison Design Group (EDG). Так уж получилось, что эта функция (оператор многомерных фигурных скобок) еще не поддерживается EDG, поэтому независимо от того, какие настройки я менял, это выдавало ошибку. Он поддерживается GCC, который использовал CMake, поэтому сборка работает.

Я считаю, что единственное «решение» — дождаться, пока EDG поддержит эту функцию в будущем обновлении.

Информацию о том, какие функции поддерживаются различными языковыми парсерами и компиляторами, можно найти по этой ссылке: https://en.cppreference.com/w/cpp/compiler_support

Ответ принят как подходящий

Поддержка расширения Cpptools новой функции языка операторов многомерных индексов C++23 в IntelliSense (не в сборке, которая обрабатывается любым компилятором, который вы используете для сборки) отслеживается (несколько неофициально) с помощью заявки на выпуск Поддержка оператора индекса многомерного массива с windows-clang-x64 #11400 . Цитирую ответ Колена в этой заявке:

Расширение C/C++ использует интерфейс компилятора EDG и эквивалентно столбцу EDG eccp в этой таблице: https://en.cppreference.com/w/cpp/compiler_support/23

Мы оставим эту проблему открытой для отслеживания, но ожидаем, что эта функция начнет работать должным образом, как только EDG добавит ее поддержку.

Другие вопросы по теме