http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52988
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW AssignedTo|redi at gcc dot gnu.org |unassigned at gcc dot | |gnu.org --- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-04-28 20:17:35 UTC --- Unassigning myself as I think this is a FE issue. I haven't been able to reduce this to something smaller but -fdump-tree-original also shows the nullptr_t case just returns without invoking the deferred function: for future<int> it's OK ;; Function _Res std::future<_Res>::get() [with _Res = int] (null) ;; enabled by -tree-original { struct _Reset __reset; struct _Reset __reset; <<cleanup_point <<< Unknown tree: expr_stmt std::__basic_future<int>::_Reset::_Reset (&__reset, (struct __basic_future &) &((struct future *) this)->D.52275) >>>>>; try { <<cleanup_point return <retval> = *std::move<int&> ((int &) (int *) std::__future_base::_Result<int>::_M_value ((struct _Result *) std::__basic_future<int>::_M_get_result (&((struct future *) this)->D.52275)))>>; } finally { std::__basic_future<int>::_Reset::~_Reset (&__reset); } } And for future<nullptr_t> it's not ;; Function _Res std::future<_Res>::get() [with _Res = std::nullptr_t] (null) ;; enabled by -tree-original { struct _Reset __reset; struct _Reset __reset; <<cleanup_point <<< Unknown tree: expr_stmt std::__basic_future<std::nullptr_t>::_Reset::_Reset (&__reset, (struct __basic_future &) &((struct future *) this)->D.51987) >>>>>; try { return <retval> = 0; } finally { std::__basic_future<std::nullptr_t>::_Reset::~_Reset (&__reset); } }