我正在试验新的尾随返回类型,我遇到了这个(简化的)代码的问题
#include <list>
class MyContainer{
std::list<int> ints;
auto begin( ) -> decltype(ints.begin())
{
return ints.begin();
}
auto begin( ) const -> decltype(ints.begin())
{
return ints.begin();
}
};
Run Code Online (Sandbox Code Playgroud)
忽略这段代码毫无意义的事实.重要的部分是使用GCC 4.6.1(带-std=c++0x标志)时生成的编译器错误:
In member function 'std::list<int>::iterator MyContainer::begin() const':
error: could not convert '((const MyContainer*)this)->MyContainer::ints.std::list<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator<int>, std::list<_Tp, _Alloc>::const_iterator = std::_List_const_iterator<int>]()' from 'std::list<int>::const_iterator {aka std::_List_const_iterator<int>}' to 'std::list<int>::iterator {aka std::_List_iterator<int>}'
Run Code Online (Sandbox Code Playgroud)
如果你是涉及模板错误的风扇不中,短篇小说的是,在的身体const的版本MyContainer::begin,则表达式ints.begin()返回类型的值std::list<int>::const_iterator(因为ints是const在这样的情况下).但是,decltype(ints.begin())生成类型std::list<int>::iterator,即在决定表达式的类型时 …
我有下一个类,并尝试声明成员函数,它将返回指向该类型但下一个代码的指针
template<class Key, int b> class b_plus_tree_inner_node {
auto split() -> decltype(this) {}
};
Run Code Online (Sandbox Code Playgroud)
给了我这样的错误
在顶层无效使用'this'
我可以用另一种方式做到这一点,我现在关于typedef的存在,但是它可能与decltype有关吗?
编辑:
我想完成这个:
b_plus_tree_inner_node<Key, b>* split() {...}
Run Code Online (Sandbox Code Playgroud)