`
luliangok
  • 浏览: 775617 次
文章分类
社区版块
存档分类
最新评论

模板重复实例化错误

 
阅读更多

以下代码编译产生如下错误:

Compiling: main.cpp
...cc1wtYYU.s: Assembler messages:
...cc1wtYYU.s:76: Error: symbol `__Z1gIXadL_Z1fvEEEvv' is already defined

代码:

void f()
{
}

typedef void(*F)();

template<F _F>
void g()
{
_F();
}

int main()
{
void f();
g<f>();
{
void f();
g<f>();
}
return 0;
}


如果不是模板实例化, g<f>()改为f()就OK.
如果去除一个void f()声明, 也会OK.
如果两个实例化在同一代码层次, 即去除那个大括号, 也OK.
就是g<f>模板实例化重复了, 好像是将两个f()声明当作了两个不同的函数.

gcc版本:

C:/Documents and Settings/jinqing>mingw32-g++.exe -v
Using built-in specs.
COLLECT_GCC=mingw32-g++.exe
COLLECT_LTO_WRAPPER=d:/mingw/bin/../libexec/gcc/mingw32/4.5.0/lto-wrapp
Target: mingw32
Configured with: ../gcc-4.5.0/configure --enable-languages=c,c++,ada,fo
c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --ena
mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-s
untime-libs --disable-werror --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.5.0 (GCC)


但VC可以通过。

可以确认为gcc的错误.
不过一查, 多年早有人发现并提出了该错误, 只是到现在还没有修复.

Bug 20357 - Multiply defined assembler symbols for template instantiations
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20357

分享到:
评论

相关推荐

    中级程序员刷题软件-auto_template:在Python中为C++模板自动创建模板实例化代码

    当代码复杂,需要在不同位置使用各种形式的模板类时,添加显式实例化和跟踪很难并导致错误。 该程序自动创建所有实例化代码,程序员不必担心链接器问题和实例化问题。 C++ 模板和问题以及我们为什么需要这个: C++ ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    JavaScript经典实例

     2.4找到并突出显示一个模式的所有实例  2.5使用新字符串替换模式  2.6使用捕获圆括号交换一个字符串中的单词  2.7使用正则表达式来去除空白  2.8使用命名实体来替代HTML标签  2.9搜索特殊字符  第3章日期、...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    全书一共被压缩为5个rar,这是第二个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流...21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流...21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流...21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    全书一共被压缩为5个rar,这是第五个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流...21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    crossphp 开发框架 v1.6.1.zip

    Module::getModel(),防止重复实例化; View类权限调整,新增virtual_path功能,新增makeIndex()方法用于生成URL的索引部分; Response增加COOKIE相关方法,调整basicAuth()参数,增加digestAuth()方法; ...

    vc++ 开发实例源码包

    ATL实现的CDHtmlDialog模板类v1.03 使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class ...

    C++大学教程,一本适合初学者的入门教材(part1)

    2.9 构造算法与自上而下逐步完善:实例研究2(标记控制重复) 2.10 构造算法与自上而下逐步完善:实例研究3(嵌套控制结构) 2.11 赋值运算符 2.12 自增和自减运算符 2.13 计数器控制循环的要点 2.14 for重复结构 ...

Global site tag (gtag.js) - Google Analytics