gpt4 book ai didi

c++ - C1001 : An internal error has occurred in the compiler

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:50 25 4
gpt4 key购买 nike

这应该是不言自明的。我正在尝试实现分布排序,但 MSVC 编译器崩溃了。这似乎是用我的 SFINAE 检测成员函数的特定情况,如果我不将 indexert 传递给函数,或者替换 has_get_index,这似乎不会发生。如果我删除剩余的索引器重载中的任何一个,它也不会发生。如果 sortable 有一个 getIndex() const 成员,问题仍然存在。

1>test.cpp(34): fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'msc1.cpp', line 1420)
1> To work around this problem, try simplifying or changing the program near the locations listed above.

(没有“上面列出的位置”)一个最小的测试用例是:

#include <vector>
#include <iterator>
#include <type_traits>

#ifndef HAS_MEM_FUNC //SFINAE (or maybe it is?)
#define HAS_MEM_FUNC(name, func) \
template<typename T> \
struct name { \
typedef char yes[1]; \
typedef char no [2]; \
template <typename C> static yes& test( typename C::func ) ; \
template <typename C> static no& test(...); \
static bool const value = sizeof(test<T>(0)) == sizeof(yes); \
}
#endif
HAS_MEM_FUNC(has_get_index,getIndex);

//default indexer undefined
template <class T>
double indexer(...);
//indexer for objects that have a "T::getIndex() const" member
template <class T>
double indexer(const typename std::enable_if<has_get_index<T>::value,T>::type& b) {
return b.getIndex();
};

template<class indexert>
void function(indexert indexeri)
{}

struct sortable {};

int main () {
function(indexer<sortable>); //line 34
}

最佳答案

这可能不是您想要的:

template <typename C> static yes& test( typename C::func ) ;

使用typename 告诉编译器C::func 将是一个类型。实际上它将是一个函数,将函数名放在参数声明中没有任何意义。

您是否打算使用 typeof 而不是 typename

关于c++ - C1001 : An internal error has occurred in the compiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com