Commit a3cbda1b by Paolo Carlini Committed by Paolo Carlini

re PR c++/70971 (ICE in parameter pack expansion)

2017-10-28  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/70971
	* g++.dg/torture/pr70971.C: New.

From-SVN: r254199
parent 5ce15f69
2017-10-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70971
* g++.dg/torture/pr70971.C: New.
2017-10-28 Paul Thomas <pault@gcc.gnu.org> 2017-10-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/81758 PR fortran/81758
......
// { dg-additional-options "-std=c++14" }
template<typename Signature>
class function;
template<typename R, typename... Args>
class invoker_base
{
public:
virtual ~invoker_base() { }
};
template<typename F, typename R, typename... Args>
class functor_invoker : public invoker_base<R, Args...>
{
public:
explicit functor_invoker(const F& f) : f(f) { }
private:
F f;
};
template<typename R, typename... Args>
class function<R (Args...)> {
public:
template<typename F>
function(const F& f) : invoker(0) {
invoker = new functor_invoker<F, R, Args...>(f);
}
~function() {
if (invoker)
delete invoker;
}
private:
invoker_base<R, Args...>* invoker;
};
template<typename>
struct unique_ptr { };
struct A {};
template <class...> struct typelist {};
template <class... Cs> unique_ptr<A> chooseB(typelist<Cs...>);
template <class... Cs, class Idx, class... Rest>
unique_ptr<A> chooseB(typelist<Cs...> choices, Idx, Rest... rest) {
auto f = [=](auto) { return [=] { return chooseB(choices, rest...); }; };
function<unique_ptr<A>()> fs[]{f(Cs{})...};
}
main() { chooseB(typelist<double, char>{}, 0, 1, 2); }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment