microsoft / microsoft/vscode-cpptools

using operator auto is giving false error

Open
#14,137 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug Language Service Visual Studio
Dominant language
TypeScript
Stars
6.2k
Forks
1.7k
Avg merge
14h 46m
Merged PRs (30d)
61

Description

Environment
Version: 1.108.1 (user setup)
Commit: 585eba7c0c34fd6b30faac7c62a42050bfbc0086
Date: 2026-01-14T14:55:44.241Z
Electron: 39.2.7
ElectronBuildId: 12953945
Chromium: 142.0.7444.235
Node.js: 22.21.1
V8: 14.2.231.21-electron.0
OS: Windows_NT x64 10.0.26100

C/C++ extension version 1.30.1

Bug Summary and Steps to Reproduce

Bug Summary:

When a class declares a conversion function using operator auto() IntelliSense will later be confused on references to that member of that class from other classes with a using statement. The code compiles fine, but IntelliSense will report it with an error squiggle.

Steps to reproduce:

  1. Use this source file

    struct a {
        operator auto() { return char(8); }
    };
    
    struct b : a {
       using a::operator auto;
       using a::operator char;
    };
    
  2. See error

Image
class "a" has no member "operator char"
Image

Expected behavior:

I would have expected using operator a::auto to be the error, and using a::operator char; to not be flagged as an error.

Configuration and Logs
There is no _c_cpp_properties.json_ in use for this example.

-------- Diagnostics - 1/15/2026, 8:47:45 PM
Version: 1.30.1
Current Configuration:
{
    "name": "Win32",
    "includePath": [
        "${workspaceFolder}/**"
    ],
    "defines": [
        "_DEBUG",
        "UNICODE",
        "_UNICODE"
    ],
    "intelliSenseModeIsExplicit": false,
    "cStandardIsExplicit": false,
    "cppStandardIsExplicit": false,
    "mergeConfigurations": false,
    "recursiveIncludes": {},
    "recursiveIncludesReduceIsExplicit": false,
    "recursiveIncludesPriorityIsExplicit": false,
    "recursiveIncludesOrderIsExplicit": false,
    "compilerPath": "",
    "compilerPathIsExplicit": true,
    "browse": {
        "limitSymbolsToIncludedHeaders": true
    }
}
Modified Settings:
{
    "C_Cpp.autocompleteAddParentheses": true,
    "C_Cpp.default.compilerPath": ""
}
Additional Tracked Settings:
{
    "editorTabSize": 4,
    "editorInsertSpaces": true,
    "editorAutoClosingBrackets": "languageDefined",
    "filesEncoding": "utf8",
    "filesAssociations": {
        "*.Ps1xml": "xml",
        "*.H86": "hex",
        "*.kwaconfig": "json",
        "*.tcc": "cpp",
        "*.xslt": "xsl",
        "*.rstc": "ini"
    },
    "filesExclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/.DS_Store": true,
        "**/Thumbs.db": true
    },
    "filesAutoSaveAfterDelay": false,
    "editorInlayHintsEnabled": true,
    "editorParameterHintsEnabled": true,
    "searchExclude": {
        "**/node_modules": true,
        "**/bower_components": true,
        "**/*.code-search": true
    },
    "workbenchSettingsEditor": "ui"
}
cpptools version (native): 1.30.1.0
Current database path: C:\USERS\CMORRIS\APPDATA\LOCAL\TEMP\{6C345B41-3F76-4648-B7E6-2DB157100C44}\.BROWSE.VC.DB
Translation Unit Mappings:
[ C:\Users\cmorris\test.cpp - source TU]:
Translation Unit Configurations:
[ C:\Users\cmorris\test.cpp ]
    Process ID: 4588
    Memory Usage: 60 MB
    Include paths:
    Defines:
        _DEBUG
        UNICODE
        _UNICODE
    Standard Version: ms_c++17
    IntelliSense Mode: windows-msvc-x64
Total Memory Usage: 60 MB
Other Extensions

No response

Additional context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the diagnostic with the minimal C++ source shown in the report and inspect how IntelliSense resolves the two using declarations. Done means the operator auto declaration is identified as the error while using a::operator char; no longer receives a false error squiggle.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.