------- Comment #8 from lloyd at randombit dot net  2010-01-21 15:38 -------
Jon (and Paolo) - thanks for doing the work!

Is there an easy workaround I can apply locally for this? I tried replacing all
instances of `typename _Fn::result_type` with `typename
result_of<_Fn(_Args...)>::type` in future just to see if I can get things going
for me locally, but then get this error on the N3000 example:

In file included from
/usr/local/gcc-4.5-r156097/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/future.2:38:0,
                 from n3000.cpp:1:
/usr/local/gcc-4.5-r156097/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:
In instantiation of 'std::result_of<std::launch(work(int)::<lambda()>)>':
/usr/local/gcc-4.5-r156097/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/future.2:1328:41:
  instantiated from 'std::future<typename std::result_of<_Functor(_ArgTypes
...)>::type> std::async(_Fn&&, _Args&& ...) [with _Fn = work(int)::<lambda()>,
_Args = {}, typename std::result_of<_Functor(_ArgTypes ...)>::type = int]'
n3000.cpp:17:57:   instantiated from here
/usr/local/gcc-4.5-r156097/lib/gcc/x86_64-unknown-linux-gnu/4.5.0/../../../../include/c++/4.5.0/functional:183:9:
error: 'std::declval [with _Tp = std::launch, typename
std::add_rvalue_reference<_Tp>::type = std::launch&&]()' cannot be used as a
function

I'm not sure if I have messed this up (my C++0x-fu is still very weak), or if
functional's result_of needs further changes to support this case - it looks to
be using decltype now (a recent change I think; thanks again!) so I had guessed
this would 'just work', but I had never even heard of declval and looking at
type_traits can't quite grok what it's doing or why this isn't happy. Simple
test cases I've tried using result_of on global functions and lambdas seem to
work so I'm having a hard time narrowing it down. Thus this comment. :)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42819

Reply via email to