VC++ 2010 SP1 惊现BUG 啊BUG

gbb21 2012-01-04 01:35:54
这个代码居然能够编译通过啊~Gramma 检查都省略了?



// TestCPP.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <utility>

using namespace std;

bool function()
{
return true;
}

template <typename Func>
int test(Func func, ...) {
this is fucking stupid!!!
how could this pass compilation ?
}

int _tmain(int argc, _TCHAR* argv[])
{

typedef decltype(test(function)) res;
return 0;
}


...全文
265 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
空心 2012-01-05
  • 打赏
  • 举报
回复
呵呵_ 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ccxxss 的回复:]

楼主你吓到我了
[/Quote]++
子达如何 2012-01-04
  • 打赏
  • 举报
回复
LZ太危言了,模板没有编译很正常嘛
Cedrus 2012-01-04
  • 打赏
  • 举报
回复
楼主你吓到我了
孤舟 2012-01-04
  • 打赏
  • 举报
回复
模板没有被实例化前 不做语法检查的 因为 在没有实例化前任何的语法检查都是不准确的
具体例子就不举了哈
  • 打赏
  • 举报
回复
《Modern C++ Design》
1.8 Optional Functionality Through Incomplete Instantiation中的一段
According to the C++ standard, the degree of syntax checking for unused template functions is up to the implementation. The compiler does not do any semantic checking—for example, symbols are not looked up.
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gbb21 的回复:]
我是说,这个是因为vc的不标准还是标准说这个是可以的?
[/Quote]
呃,C++标准有很多没规定,编译器自由发挥的情况。
这种情况你得看看C++标准了,没研究过这个情况
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 skyworth98 的回复:]

引用 3 楼 akirya 的回复:
正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改

C/C++ code
int x = sizeof(test(function));

在VC9下也没问题。


sp....

实例化一个看看??
这个根本就是被忽略了嘛
[/Quote]
特定情况下是不检查模板语法的。。。。
实例化的时候当然得检查编译了。
skyworth98 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 akirya 的回复:]
正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改

C/C++ code
int x = sizeof(test(function));

在VC9下也没问题。
[/Quote]

sp....

实例化一个看看??
这个根本就是被忽略了嘛
Jinhao 2012-01-04
  • 打赏
  • 举报
回复
因为你没有实例化模板。
gbb21 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]

引用 4 楼 gbb21 的回复:

引用 3 楼 akirya 的回复:

正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改
C/C++ code
int x = sizeof(test(function));

在VC9下也没问题。

template 真心可以跳过语法检查么?


当然了,你给的代码不就是这个特定情况么。
[/Quote]
我是说,这个是因为vc的不标准还是标准说这个是可以的?
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gbb21 的回复:]

引用 3 楼 akirya 的回复:

正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改
C/C++ code
int x = sizeof(test(function));

在VC9下也没问题。

template 真心可以跳过语法检查么?
[/Quote]

当然了,你给的代码不就是这个特定情况么。
gbb21 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 akirya 的回复:]

正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改
C/C++ code
int x = sizeof(test(function));

在VC9下也没问题。
[/Quote]
template 真心可以跳过语法检查么?
  • 打赏
  • 举报
回复
正常,test根本没编译,很多情况下template是不做语法检查的。
稍作修改
int x = sizeof(test(function));

在VC9下也没问题。
gbb21 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

应该是代码里没有真的用过test模板,所以压根没参加编译。
[/Quote]
没编译语法检查也不应该跳过啊~
luciferisnotsatan 2012-01-04
  • 打赏
  • 举报
回复
应该是代码里没有真的用过test模板,所以压根没参加编译。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧