#2407 closed Bugs (fixed)
[Proto] Error while using operator<< and iostream
Reported by: | Owned by: | Eric Niebler | |
---|---|---|---|
Milestone: | Boost 1.37.0 | Component: | proto |
Version: | Boost Development Trunk | Severity: | Problem |
Keywords: | Proto | Cc: |
Description
Bug found in the "[Boost-users] [Proto] Strange behavior with semantic action and custom tag function" threads.
Quoting Eric : "The operator<< in the output expression can potentially match either the ostream inserter we've defined above or Proto's operator<<. Proto's operator overload *should* be disabled with SFINAE because the resulting expression type doesn't match the domain's grammar. But the failure happens before we get that far. Before checking the return type against the grammar, Proto first calculates the return type, which first involves Protofying std::cout, resulting in e<proto::terminal<std::ostream &>::type>. This is where the failure occurs because this simple terminal expression *also* doesn't match the grammar. That triggers the static assertion failure in e<>."