https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think this is expected, the std:future type and std::async function are declared unconditionally, but the definitions are guarded by: #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \ && (ATOMIC_INT_LOCK_FREE > 1) If your target doesn't meet those conditions then you don't get to use std::future