https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120366

            Bug ID: 120366
           Summary: __PRETTY_FUNCTION__ is sometimes an array of unknown
                    bound
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

Here's a reduced example of an issue we ran into:

using size_t = decltype(sizeof(0));

template <size_t N>
void accepts_bounded(char const(&)[N]) { }

void f() {
    accepts_bounded(__PRETTY_FUNCTION__); // ok
    [](auto){
        accepts_bounded(__PRETTY_FUNCTION__); // ok
    }(0);
}

template <class T>
void g(T) {
    accepts_bounded(__PRETTY_FUNCTION__); // ok
    [](auto){
        accepts_bounded(__PRETTY_FUNCTION__); // error
    }(0);    
}

int main() {
    accepts_bounded(__PRETTY_FUNCTION__); // ok
    []{
        accepts_bounded(__PRETTY_FUNCTION__); // ok
    }();

    [](auto){
        accepts_bounded(__PRETTY_FUNCTION__); // ok
    }(0);  

    [](auto){
        [](auto){
            accepts_bounded(__PRETTY_FUNCTION__); // error
        }(1);
    }(0);  

    f();
    g(2);
}

We expect __PRETTY_FUNCTION__ to be some char const[N]. And that seems to be
true... almost all the time. Except for a generic lambda that is inside of a
template, where __PRETTY_FUNCTION__ has type char const[] instead and so that
deduction fails.

Reply via email to