4

I was looking at a random C++ example on Github ( https://github.com/Quuxplusone/coro/blob/master/examples/pythagorean_triples_generator.cpp ), and was surprised to see that it actually compiles ( https://coro.godbolt.org/z/JXTX4Y ).

#include <https://raw.githubusercontent.com/Quuxplusone/coro/master/include/coro/shared_generator.h>
#include <stdio.h>
#include <tuple>
#include <range/v3/view/take.hpp>

namespace rv = ranges::view;

auto triples() -> shared_generator<std::tuple<int, int, int>> { 
    for (int z = 1; true; ++z) {
        for (int x = 1; x < z; ++x) {
            for (int y = x; y < z; ++y) {
                if (x*x + y*y == z*z) {
                    co_yield std::make_tuple(x, y, z);
                }
            }
        }
    }
}

int main() {
    for (auto&& triple : triples() | rv::take(10)) {
        printf(
            "(%d,%d,%d)\n",
            std::get<0>(triple),
            std::get<1>(triple),
            std::get<2>(triple)
        );
    }
}

Is this a new C++20 feature, or an extension on Godbolt, or something entirely else?

4

2 回答 2

5

这是 godbolt.org 的一个功能。见https://github.com/mattgodbolt/compiler-explorer/wiki/FAQ

:我可以包含来自 url 的文件吗?

:编译器资源管理器能够通过滥用#include指令将原始文本包含到您的源代码中。

#include <url_to_text_to_include>
...

(见这个链接一个活生生的例子:https ://godbolt.org/z/Pv0K0c )

请注意,该 URL 必须允许跨域请求才能正常工作。

于 2019-12-29T02:54:13.943 回答
1

据我所知,处理#include指令中“<”和“>”字符对之间的标记的方式完全是(?)实现定义的。

[cpp.include]/2(强调我的)...

形式的预处理指令

# include < h-char-sequence > new-line

在一系列实现定义的位置中搜索由 < 和 > 分隔符之间的指定序列唯一标识的标头,并用标头的全部内容替换该指令。如何指定位置或标识的标头是 implementation-defined

话虽如此,这不是我以前遇到过的事情。

于 2019-12-28T22:31:09.870 回答