On Tue, Aug 11, 2015 at 5:46 AM, Mario Lang
The example is a bit silly, since foreach discards the return value of apply_visitor anyway. So my solution was to change the visitor to define result_type as void. This works. However, I am wondering why delayed_visitor does no longer work in this situation? Is it because I am trying to return a reference?
I believe this is caused by a bug in the trait used to detect whether result_type is present. It used to form a pointer to result_type, and pointer to references are ill-formed, so the trait reports that result_type doesn't exist, and then the overloads of apply_visitor do not SFINAE correctly. The bug has been fixed in https://github.com/boostorg/variant/commit/aad58b5fe5b2605bf752c8151ae0539df... . Tim