下面的代码在clang上编译(我尝试过7和8),但是在gcc(7、8或9)上编译,都使用generator.withTypeMappers
。使用gcc,我会收到一个--std=c++17
错误,如您在此处看到的:https://godbolt.org/z/69Bomq。
我可以通过取消注释ambiguous template instantiation
来为gcc修复它。如果我将#define FIX_GCC
的专业领域中的first_type<C>
和first_type<const C>
更改为C
和const C
,它也会编译,但是如果有一些{{ 1}}来缩小那里的专业化范围。
这里的gcc错误吗?还是我做错了c碰碰的声音?
更新:删除专业化中的一层模板,即traits<Map<...>>
,即使使用模板别名enable_if_t<...>
,也使GCC感到满意,请参见https://godbolt.org/z/90kGEP
Map
first_type