Given the following source code:
#include <memory> #include <typeinfo> struct Base { virtual ~Base(); }; struct Derived : Base { }; int main() { std::unique_ptr<Base> ptr_foo = std::make_unique<Derived>(); typeid(*ptr_foo).name(); return 0; }
and compiled it with:
clang++ -std=c++14 -Wall -Wextra -Werror -Wpedantic -g -o test test.cpp
Setting up the environment:
linux x86_64 clang version 5.0.0
It does not compile due to a warning (note -Werror ):
error: expression with side effects will be evaluated despite being used as an operand to 'typeid' [-Werror,-Wpotentially-evaluated-expression] typeid(*ptr_foo).name();
(Note only: GCC does not claim to be such a potential issue)
Question
Is there a way to get information about the type specified by unique_ptr without generating such a warning?
Note. I'm not talking about disabling -Wpotentially-evaluated-expression or avoiding -Werror .
source share