I am a bit confused by the following code:
#include <iostream>
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
int main()
{
auto x = f();
std::cout << x;
}
In my opinion, this code should be UB (undefined behaviour). We return a pointer to a C-style array element inside a local scope. Things should go wrong. However, none of the compilers I tested with complain (I used -Wall -Wextra -pedantic
on both g++ and clang). valgrind
does not complain either.
Is the code above valid or is it UB as one would think?
PS: running it seems to produce the "correct" result, i.e. displaying "test", but that's not an indication of correctness.