首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环初始化中的auto和decltype

for循环初始化中的auto和decltype
EN

Stack Overflow用户
提问于 2012-08-20 23:46:19
回答 1查看 526关注 0票数 4

我一直在愉快地迭代,比如

代码语言:javascript
复制
for( auto n = object.get_size(), i = decltype( n )( 0 ); 
     i < n; 
     ++i 
) { ... } 

让所有的类型都自动正确。使用g++ 4.7.1没有问题,但是使用版本4.7.0我得到了错误。由于4.7.1是非常新的版本,我想知道哪个版本实现了这个bug,哪个版本是标准的。此外,4.7.0 (以及带有std=c++0x的4.6.3 )只有在与模板结合使用时才会出现问题,并且会在不同的用法中生成不同的错误。请参阅以下代码:

代码语言:javascript
复制
/* test.cxx */
#ifdef V1

#ifdef GENERIC
template< class T >
void do_some( T obj ) {
    for( auto n = obj, i = decltype( n )( 0 );
             i < n; ++i ) { }
}
#endif

#ifdef SPECIFIC
void do_some( int obj ) {
    for( auto n = obj, i = decltype( n )( 0 );
             i < n; ++i ) { }
}
#endif

#endif

#ifdef V2
template< class T >
class foo {
    T member;
public:
    foo( T stuff ) : member( stuff ) {}
    T get_member() { return member; }
};

#ifdef GENERIC
template< class T >
void do_some( T obj ) {
    for( auto n = obj.get_member(), i = decltype( n )( 0 );
             i < n; ++i ) { }
}
#endif

#ifdef SPECIFIC
void do_some( foo< int > obj ) {
    for( auto n = obj.get_member(), i = decltype( n )( 0 );
             i < n; ++i ) { }
}
#endif

#endif



int main() {
    #ifdef V1
    int foo_inst = 10;
    #endif

    #ifdef V2
    foo< int > foo_inst( 10 );
    #endif

    do_some( foo_inst );

    return 0;
}

和g++版本4.7.0的输出

代码语言:javascript
复制
$ g++-4.7 -DV1 -DGENERIC -std=c++11 test.cxx 
test.cxx: In function ‘void do_some(T)’:
test.cxx:7:42: error: inconsistent deduction for ‘auto’: ‘T’ and then ‘decltype (n)’
$ g++-4.7 -DV1 -DSPECIFIC -std=c++11 test.cxx 
/* compiles fine */
$ g++-4.7 -DV2 -DGENERIC -std=c++11 test.cxx 
test.cxx: In function ‘void do_some(T)’:
test.cxx:35:55: error: variable ‘auto n’ with ‘auto’ type used in its own initializer
$ g++-4.7 -DV2 -DSPECIFIC -std=c++11 test.cxx 
/* compiles fine */
EN

回答 1

Stack Overflow用户

发布于 2012-08-20 23:56:18

没有解释,只是测试:我和yous有相同的错误,对于4.7.1以上的gcc,没有错误,没有4.7.1,4.8 (主干)和clang-3.2 (主干)的错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12040891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档