I have the following code which compiles with no warnings (-Wall -pedantic) with g++
#include
#include
using namespace std;
cla
The reason why this fails is because it essentially compiles to the following under the hood.
Foo o(std::string("wurd"));
In this case the Foo value is taking a reference to a temporary object which is deleted after the constructor completes. Hence it's holding onto a dead value. The second version works because it's holding a reference to a local which has a greater lifetime than the Foo instance.
To fix this change the memebr from being a const std::string& to a const std::string.