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



Shixiong <shixiong at kugelworks dot com> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |shixiong at kugelworks dot

                   |                            |com



--- Comment #1 from Shixiong <shixiong at kugelworks dot com> 2013-04-12 
07:29:38 UTC ---

I am not an expert of C++11, but I am trying to help you with this ICE. Before

I jump into the compiler to find the bugs, I guess you probably made several

mistakes in your given code.



1) when lambdas are used as parameters, I think, they should be written in

either function pointer (no state) or functional object (with state, dependent

on outside vars).



2) it declared "typename T::type b()", but instantiated the class with int, but

int do not  have a filed named type.



3)C++11 seems to only support monomorphic lambdas, if you want to use

polymorphic lambdas, you probably should use other libraries like Boost.



If changed into the following code, it works.



template <typename T>

class A

{

 T b(); // Note: still cannot use 'typename T::type b()'

};





template <typename T, typename U>

void waldo(T, U);



template <typename T>

void bar()

{

  A<T> (*func_pointer1) (A<T>) = [](A<T> a) { return a; };

  void (*func_pointer2) () = []() { };

    waldo(func_pointer2,

          func_pointer1);

//  waldo ([](A<T> a) { return a; }, []() { });

}



int main()

{

    bar<int>();

}



Anyway, it is just my personal opinion. If I made mistakes, pls. tell me.

Reply via email to