Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compiling on GCC 4.8 #386

Closed
The-EDev opened this issue Apr 5, 2022 · 3 comments · Fixed by #399
Closed

Compiling on GCC 4.8 #386

The-EDev opened this issue Apr 5, 2022 · 3 comments · Fixed by #399
Labels
bug Something isn't working
Milestone

Comments

@The-EDev
Copy link
Member

The-EDev commented Apr 5, 2022

There are a couple issues that don't allow compiling, the most recent is this, but also the changes introduced in #327.

Here's an error log:

In file included from crow.h:19:0,
                 from main.cpp:1:
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
crow/routing.h:584:88: error: no matching function for call to ‘wrapped_handler_call(crow::request&, crow::response&, const main()::__lambda53&)’
                   detail::wrapped_handler_call(req, res, f, std::forward<Args>(args)...);
                                                                                        ^
crow/routing.h:584:88: note: candidates are:
In file included from crow/routing.h:18:0,
                 from crow.h:19,
                 from main.cpp:1:
./crow/middleware.h:206:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:206:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = main()::__lambda53; Args = {}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:206:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:216:11: note: template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:216:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = main()::__lambda53; Args = {}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:216:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:226:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:226:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = main()::__lambda53; Args = {}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:226:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:236:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:236:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = main()::__lambda53; Args = {}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:236:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:247:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:247:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = main()::__lambda53; Args = {}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]’
main.cpp:10:6:   required from here
./crow/middleware.h:247:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
In file included from crow.h:19:0,
                 from main.cpp:1:
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
crow/routing.h:584:88: error: no matching function for call to ‘wrapped_handler_call(crow::request&, crow::response&, const crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50&, std::basic_string<char>)’
                   detail::wrapped_handler_call(req, res, f, std::forward<Args>(args)...);
                                                                                        ^
crow/routing.h:584:88: note: candidates are:
In file included from crow/routing.h:18:0,
                 from crow.h:19,
                 from main.cpp:1:
./crow/middleware.h:206:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:206:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:206:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:216:11: note: template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:216:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:216:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:226:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:226:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:226:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:236:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:236:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:236:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:247:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:247:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:241:22:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:247:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
In file included from crow.h:19:0,
                 from main.cpp:1:
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
crow/routing.h:584:88: error: no matching function for call to ‘wrapped_handler_call(crow::request&, crow::response&, const crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51&, std::basic_string<char>)’
                   detail::wrapped_handler_call(req, res, f, std::forward<Args>(args)...);
                                                                                        ^
crow/routing.h:584:88: note: candidates are:
In file included from crow/routing.h:18:0,
                 from crow.h:19,
                 from main.cpp:1:
./crow/middleware.h:206:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:206:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:206:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:216:11: note: template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:216:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<(crow::black_magic::is_callable<F, crow::request&, crow::response&, Args ...>::value && (! crow::black_magic::is_callable<F, const crow::request, crow::response&, Args ...>::value))>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:216:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:226:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:226:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::response&, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:226:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:236:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& req, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:236:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, crow::request, Args ...>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:236:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
crow/routing.h: In instantiation of ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’:
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:247:11: note: template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...)
           wrapped_handler_call(crow::request& /*req*/, crow::response& res, const F& f, Args&&... args)
           ^
./crow/middleware.h:247:11: note:   template argument deduction/substitution failed:
./crow/middleware.h: In substitution of ‘template<class F, class ... Args> typename std::enable_if<crow::black_magic::is_callable<F, Args>::value>::type crow::detail::wrapped_handler_call(crow::request&, crow::response&, const F&, Args&& ...) [with F = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’:
crow/routing.h:584:88:   required from ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:581:16:   required from ‘struct crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’
crow/routing.h:577:22:   required from ‘void crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]’
crow/app.h:254:129:   required from ‘void crow::Crow<Middlewares>::validate() [with Middlewares = {}]’
crow/app.h:280:22:   required from ‘void crow::Crow<Middlewares>::run() [with Middlewares = {}]’
main.cpp:12:25:   required from here
./crow/middleware.h:247:11: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
In file included from /usr/include/boost/utility/compare_pointees.hpp:15:0,
                 from /usr/include/boost/optional/optional.hpp:55,
                 from /usr/include/boost/optional.hpp:15,
                 from crow/query_string.h:9,
                 from crow.h:2,
                 from main.cpp:1:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.5/include/c++/functional:2334:2: error: ‘std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27; _Res = void; _ArgTypes = {crow::request&, crow::response&}; std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> = std::function<void(crow::request&, crow::response&)>&]’, declared using local type ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = main()::__lambda53; Args = {}]::__lambda27’, is used but never defined [-fpermissive]
  operator=(_Functor&& __f)
  ^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.5/include/c++/functional:2334:2: error: ‘std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27; _Res = void; _ArgTypes = {crow::request&, crow::response&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >}; std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> = std::function<void(crow::request&, crow::response&, std::basic_string<char>)>&]’, declared using local type ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda50; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’, is used but never defined [-fpermissive]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.5/include/c++/functional:2334:2: error: ‘std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27; _Res = void; _ArgTypes = {crow::request&, crow::response&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >}; std::function<_Res(_ArgTypes ...)>::_Requires<std::__and_<std::__not_<std::is_same<typename std::decay<_Tp>::type, std::function<_Res(_ArgTypes ...)> > >, std::__or_<std::is_void<_Tp>, std::is_convertible<std::function<_Res(_ArgTypes ...)>::_Invoke<typename std::decay<_Tp>::type>, _Res> > >, std::function<_Res(_ArgTypes ...)>&> = std::function<void(crow::request&, crow::response&, std::basic_string<char>)>&]’, declared using local type ‘crow::TaggedRule<Args>::operator()(Func&&) [with Func = crow::Crow<Middlewares>::validate() [with Middlewares = {}]::__lambda51; Args = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >}]::__lambda27’, is used but never defined [-fpermissive]

@dranikpg would it be possible to have wrapped_handler_call compile under GCC 4.8 ? What do you think?

@The-EDev The-EDev added the bug Something isn't working label Apr 5, 2022
@The-EDev
Copy link
Member Author

The-EDev commented Apr 9, 2022

The candidate that should be considered seems to be the one in middleware.h : 247, that's the same one getting error: no type named ‘type’ in ‘struct std::enable_if<false, void>’

@The-EDev
Copy link
Member Author

The-EDev commented Apr 10, 2022

Update: the error occurs for all instances of std::enable_if<black_magic::is_callable... I'm going to attempt to use the old method (black_magic::CallHelper) which didn't have this error.
I'm not sure what specifically in is_callable is causing this error, hence the switching back..

@The-EDev
Copy link
Member Author

Using CallHelper works, I haven't checked all the features or ran tests, but hello world compiled on g++ 4.8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant