Skip to content

Templated infinitely recursive function does not fail to compile #141686

Open
@alexkaratarakis

Description

@alexkaratarakis

Min repro:

template <typename R1>
static R1 self_recursion_template(const R1& input)
{
    return self_recursion_template<R1>(input);
}

static int self_recursion_non_template(const int& input)
{
    return self_recursion_non_template(input);
}

int main()
{
    int input{};

    const int result = self_recursion_template(input);
    // const int result = self_recursion_non_template(input);  // Properly fails to compile
    (void)result;
}

Expected results: compilation fails for the templated version of infinite self-recursion like it does for the non-templated version of infinite self-recursion.

Actual results: compiles and then stack overflows when trying to run it.

Additionally, msvc rejects the code.

Demo: https://godbolt.org/z/eEq7PT771

Ubuntu clang version 20.1.6 (++20250517123339+5befd1fb3c97-1~exp1~20250517003355.120

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions