https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67881
Bug ID: 67881 Summary: type deduced incorrectly in constructor template when binding to const int Product: gcc Version: 5.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: akrzemi1 at gmail dot com Target Milestone: --- My class has a perfect-forwarding non-explicit constructor. I expect that when it binds to a constant lvalue of type int, it recognizes the type as lvalue reference. My expectation is illustrated with the static_assert in the code: ``` #include <type_traits> struct any_ { template <class R> any_(R&&) { static_assert(std::is_lvalue_reference<R>::value, "expected lvalue ref"); } }; int main() { const int i = 7; any_ oi = i; } ``` This assertion fails in gcc 5.1 and 5.2 (but passes in 4.8 and 4.9).