小编gus*_*gus的帖子

g ++可变参数模板问题

所以我把这个程序给了g ++和clang(在Linux上,x86_64):

#include <iostream>

using namespace std;

template<char... Cs>
struct A {
  static const string s;
  static A a;
  ~A() {
    cout << "s = " << s << "\n";
  }
};

template<char... Cs>
const string A<Cs...>::s = {{Cs...}};

template<char... Cs>
A<Cs...> A<Cs...>::a;

int main(void)
{
  (void)A<'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'>::a;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Clang输出s = aaaaaaaaaaaaaaaa(如预期的那样).

g ++(版本5到8)输出s = s = aaaaaaaa(非常意外).

如果不使用可变参数模板,则不会发生这种情况(如果删除所有<>代码并内联字符列表以进行初始化A::s …

c++ g++ variadic-templates

10
推荐指数
1
解决办法
152
查看次数

标签 统计

c++ ×1

g++ ×1

variadic-templates ×1