This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/86495] New: false no return statement warning in "if constexpr" branch
- From: "tower120 at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 11 Jul 2018 17:49:50 +0000
- Subject: [Bug c++/86495] New: false no return statement warning in "if constexpr" branch
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86495
Bug ID: 86495
Summary: false no return statement warning in "if constexpr"
branch
Product: gcc
Version: 8.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tower120 at gmail dot com
Target Milestone: ---
The following code produce false "no return statement" warning in gcc 8.1.
Everything fine on 7.x
Live: https://godbolt.org/g/dCuFci
#include <iostream>
#include <variant>
template<class Base, class Variant>
class variant_w_base{
Base* m_base;
Variant m_variant;
void update_base(){
m_base = std::visit([](auto&& arg) -> Base* {
using Arg = std::decay_t<decltype(arg)>;
// ERRONEOUS WARNING HERE.
if constexpr (std::is_same_v<Arg, std::monostate>){
return nullptr;
} else {
return static_cast<Base*>(&arg);
}
}, m_variant);
}
public:
variant_w_base(){
update_base();
}
};
int main() {
struct Base{};
struct Data : Base{};
variant_w_base<Base, std::variant<Data>> v;
return 0;
}