IntelliSense reports an error on a valid deduction guide (error: the return type must directly designate a specialization of the associated class template) · Issue #14824 · microsoft/vscode-cpptools · GitHub
Skip to content

IntelliSense reports an error on a valid deduction guide (error: the return type must directly designate a specialization of the associated class template) #14824

Closed

Description

Environment

  • OS: macOS 27.0.1 (Apple Silicon)
  • VS Code version: 1.140.0
  • C/C++ extension version: 1.34.4 (darwin-arm64)
  • Compilers that accept the code: Apple clang 21.0.0 (clang-2100.3.34.2), GCC 16.2.0 (-std=c++23 -Wall -Wextra -pedantic)

Bug Summary and Steps to Reproduce

Bug Summary:

IntelliSense reports an error on a valid deduction guide whose return type is an explicit specialization of the class template. Clang and GCC compile and run the code without warnings.

Steps to reproduce:

Set the "cppStandard": "gnu++20".

#include <cstddef>
#include <span>

using std::size_t;

template< size_t i = std::dynamic_extent, size_t s = std::dynamic_extent >
struct slice
    {
    static constexpr size_t index = i, size = s;
    };

template<>
struct slice< std::dynamic_extent, std::dynamic_extent >
    {
    size_t index = 0, size = 0;

    constexpr slice() noexcept = default;

    constexpr slice( size_t i, size_t s ) noexcept : index( i ), size( s ) {}
    };

slice() -> slice<>;

slice( size_t, size_t ) -> slice<>;   // error: "the return type must directly designate a specialization of the associated class template"

template< size_t i, size_t s >
constexpr slice< i, s > const_slice;

auto s0 = slice{};              // OK
auto s1 = slice{ 1, 2 };        // error
auto s2 = slice< 3, 4 >{};      // OK
auto s3 = const_slice< 5, 6 >;  // OK
slice s5 = { 2, 4 };            // error
slice s6;                       // OK
size_t n = 1;
auto s7 = slice{ n, 3 };        // error

int main() {}

Update: switching to 1.35.3 only partly fixed the problem. Now the error occurs at these lines:

    slice() -> slice<>; // redeclaration of deduction guide "()->slice<18446744073709551615UL, 18446744073709551615UL>" (previous declaration at line 30)

    slice( size_t, size_t ) -> slice<>; // rredeclaration of deduction guide "(size_t, size_t)->slice<18446744073709551615UL, 18446744073709551615UL>" (previous declaration at line 32)

Configuration and Logs

-------- Diagnostics - 09/10/2026, 11:09:54
Version: 1.35.3
Current Configuration:
{
    "name": "Mac",
    "includePath": [
        "/Users/dom/Repositories/Foo/**"
    ],
    "defines": [],
    "compilerPath": "/usr/bin/clang",
    "cStandard": "gnu17",
    "intelliSenseMode": "macos-clang-arm64",
    "compilerPathInCppPropertiesJson": "/usr/bin/clang",
    "cppStandard": "c++26",
    "intelliSenseModeIsExplicit": false,
    "cStandardIsExplicit": false,
    "cppStandardIsExplicit": true,
    "mergeConfigurations": false,
    "recursiveIncludes": {},
    "recursiveIncludesPriorityIsExplicit": false,
    "recursiveIncludesOrderIsExplicit": false,
    "compilerPathIsExplicit": false,
    "browse": {
        "limitSymbolsToIncludedHeaders": true
    }
}
Modified Settings:
{
    "C_Cpp.default.cppStandard": "c++26",
    "C_Cpp.copilotHover": "disabled"
}
Additional Tracked Settings:
{
    "editorTabSize": 4,
    "editorInsertSpaces": true,
    "editorAutoClosingBrackets": "languageDefined",
    "filesEncoding": "utf8",
    "filesAssociations": {},
    "filesExclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/.jj": true,
        "**/.DS_Store": true,
        "**/Thumbs.db": true
    },
    "filesAutoSaveAfterDelay": true,
    "editorInlayHintsEnabled": true,
    "editorParameterHintsEnabled": true,
    "searchExclude": {
        "**/node_modules": true,
        "**/bower_components": true,
        "**/*.code-search": true
    },
    "workbenchSettingsEditor": "ui"
}
cpptools version (native): 1.35.3.0
Current database path: /Users/dom/Library/Caches/vscode-cpptools/3e0375b3f54b329c80d0cabaf418165d/.browse.VC.db
Translation Unit Mappings:
[ /Users/dom/Repositories/Foo/Projects/Engine/Source/Engine.cpp - source TU]:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_ctype.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_stdio.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_time.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/signal.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/malloc/_malloc.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigaltstack.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_size_t.h
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/21/include/__stddef_max_align_t.h
    /Users/dom/Repositories/Foo/Projects/Engine/Source/Foundation/Math/Matrix/MatrixForward.hpp
    /Users/dom/Repositories/Foo/Projects/Engine/Source/Foundation/Math/Matrix/Slice.hpp
    /Users/dom/Repositories/Foo/Projects/Engine/Source/Foundation/Math/Matrix/StaticMatrix.hpp
    /Users/dom/Repositories/Foo/Projects/Engine/Source/Foundation/Math/Vector/VectorForward.hpp
Translation Unit Configurations:
[ /Users/dom/Repositories/Foo/Projects/Engine/Source/Engine.cpp ]
    Process ID: 82533
    Memory Usage: 447 MB
    Compiler Path: /usr/bin/clang
    Language: C++
    Include Paths:
        system include: /usr/local/include
        system include: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1
        system include: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/21/include
        system include: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
        system include: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
        system framework search path (default): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks
        system framework search path (default): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/SubFrameworks
        include (recursive): /Users/dom/Repositories/Foo
    Standard Version: c++26
    IntelliSense Mode: macos-clang-arm64
    Other Flags:
        --clang
        --clang_version=210106
Total Memory Usage: 447 MB

Other Extensions

No response

Additional context

No response

Activity

  1. moved this from Todo to In progress in cpptoolson Oct 13, 2026
  2. moved this from In progress to Pull Request in cpptoolson Oct 13, 2026
  3. moved this from Pull Request to Done in cpptoolson Oct 14, 2026
  4. DominikDeak commented on Oct 28, 2026

    @DominikDeak
    Author

    Sean McManus (@sean-mcmanus) thanks for the update.

    Unfortunately version 1.35.5 still reports bogus errors:

    redeclaration of deduction guide "()->slice<0UL, 18446744073709551615UL>" (previous declaration at line 39)
    redeclaration of deduction guide "(size_t)->slice<0UL, 18446744073709551615UL>" (previous declaration at line 41)
    redeclaration of deduction guide "(size_t, size_t)->slice<0UL, 18446744073709551615UL>" (previous declaration at line 43)
    

    Sample code:

    #include <cstddef>
    #include <span>
    
    template< std::size_t i = 0, std::size_t s = std::dynamic_extent >
    struct slice
        {
        static constexpr std::size_t index = i, size = s;
        };
    
    // Full specialisation for the default arguments, with run-time members
    template<>
    struct slice< 0, std::dynamic_extent >
        {
        std::size_t index = 0, size = 0;
    
        constexpr slice() noexcept = default;
        constexpr slice( std::size_t i, std::size_t s = 1 ) noexcept : index( i ), size( s ) {}
        };
    
    // Each guide is declared exactly once
    slice() -> slice<>; // error: redeclaration of deduction guide ...
    slice( std::size_t ) -> slice<>; // error: redeclaration of deduction guide ...
    slice( std::size_t, std::size_t ) -> slice<>; // error: redeclaration of deduction guide ...
    
    int main()
        {
        constexpr slice a;
        constexpr slice b( 2 );
        constexpr slice c( 2, 3 );
        constexpr slice< 1, 2 > d;
    
        static_assert( std::is_same_v< decltype( a ), const slice<> > );
        static_assert( c.index == 2 and c.size == 3 and d.size == 2 and b.size == 1 );
        }
  5. Colengms commented on Oct 29, 2026

    @Colengms
    Contributor

    Hi Dominik Deák (@DominikDeak) . We're not easily able to repro an issue with the code provided, with 1.35.5, including on macOS with Apple Clang 21. Could you fully reload VS Code (to confirm it's definitely not still using the prior version) and provide log output from a repro? Maybe both C/C++: Log Diagnostics output, and any relevant output from the C/C++ output channel with "C_Cpp.loggingLevel": "Debug"? That might provide us with some clues.

  6. DominikDeak commented on Oct 29, 2026

    @DominikDeak
    Author

    Apologies, my mistake. The plugin was updated, but VSCode didn't reload. After reloading the app, I can confirm the issue has been resolved. Thanks for looking into this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Language ServicebugfixedCheck the Milestone for the release in which the fix is or will be available.

Type

No type

Projects

  • Status
    Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions