代码之家  ›  专栏  ›  技术社区  ›  W.F.

可以自由使用涉及类模板参数推导的函数样式转换表达式吗?

  •  2
  • W.F.  · 技术社区  · 7 年前

    举个例子:

    template <class T>
    struct tag { 
        tag(T) {}
    };
    
    int main() {
                  tag(int{});     //#1
        auto t1 = tag(int{});     //#2
        auto t3 = (tag(int{}));   //#3
    }
    

    tag 有一个自动推导指南,该指南应涉及类模板参数的推导。至少我认为它应该像#1和#3在 [clang] . 另一方面,在 [gcc] . 所以问题是,我可以在函数样式转换表达式中自由使用类模板参数的推导吗?或者在这件事上有任何限制吗?

    clang的错误列表:

    prog.cc:7:19: error: expected unqualified-id
                  tag(int{});     //#1
                      ^
    prog.cc:7:19: error: expected ')'
    prog.cc:7:18: note: to match this '('
                  tag(int{});     //#1
                     ^
    prog.cc:9:23: error: expected ')'
        auto t3 = (tag(int{}));   //#3
                          ^
    prog.cc:9:19: note: to match this '('
        auto t3 = (tag(int{}));   //#3
                      ^
    prog.cc:9:27: error: expected expression
        auto t3 = (tag(int{}));   //#3
                              ^
    4 errors generated.
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Rakete1111    7 年前

    这是一个已知的错误, #34091 . 基本上,clang不希望 模板id 那里它最终会得到修复(但恐怕不是在5.0.1中)。