------- Comment #5 from piotr dot wyderski at gmail dot com  2009-12-21 14:27 
-------
(In reply to comment #4)
> Certainly *is* a problem if we hope to debug the issue decently fast...
> 

I meant "the cause of the problem is in its size", i.e.
there must be a critical mass of templates to trigger
the issue. There probably is no problem in std::unique_ptr
on its own; to me it seems to be a "random victim" of
something strange happening under the hood. As I said,
I am not able to shrink it down in a reasonable way.
For example, this simplified testcase compiles flawlessly:


#include <memory>

    struct release_deleter {

        template <class T> void operator()(T* p) {

            static_assert(std::is_pod<T>::value ||
                          std::is_same<T, void>::value,
                          "T must be a POD type or void");

        }
    };


    template <typename T> class dynamic_dispatch;


    template <

        typename TC,
        typename TR,
        typename TD,
        typename... TA

    > class dynamic_dispatch<TR (TC::*)(TD&, TA...)> {

        class entry {};

        typedef std::unique_ptr<entry[], release_deleter> entry_ptr;

    public:

        template <typename UC, typename UD> void attach_handler(TR
(UC::*m)(UD&, TA...));
    };



    template <

        typename TC,
        typename TR,
        typename TD,
        typename... TA

    > template <

        typename UC,
        typename UD

    > void dynamic_dispatch<TR (TC::*)(TD&, TA...)>::attach_handler(TR
(UC::*m)(UD&, TA...)) {

    };


    class C {

    public:

        void M(int&);
    };


dynamic_dispatch<void (C::*)(int&)> dd;

int main() {

    dd.attach_handler(&C::M);
}

But the problem is definitely related to template
processing. If you comment out the folowing line
(at the very bottom of the attached file, in the
constructor):

attach_handler(static_cast<void (file_reader::*)(read_request<0>&)>
(&file_reader::execute_command)); 

it compiles OK.


-- 


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

Reply via email to