Home > Archive > VC Language > May 2006 > C1001: INTERNAL COMPILER ERROR line 2701
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
C1001: INTERNAL COMPILER ERROR line 2701
|
|
| gast128@hotmail.com 2006-05-24, 7:10 pm |
| Dear all,
we have a large sln consisting of 95 projects and about 3000 classes.
Lately we ran in all sorts of compiler errors (C1001, C1055 and PRJ0002
with buffer overrun).
For example the following code snippet gives c1001 (/D "_DEBUG" /Gm
/EHsc /RTC1 /MDd /Zc:wchar_t /GR /W4 /WX /c /Wp64 /ZI /TP):
//omitted includes
namespace Tests
{
struct Foo1234567890 {};
struct Foo1234567890123456789012345678901234567
890;
typedef Foo1234567890123456789012345678901234567
890* KeyType;
}
template <typename T>
struct Container
{
typedef Tests::KeyType KeyType;
typedef typename std::pair<KeyType, T> Pair;
typedef typename boost::multi_index::multi_index_containe
r
<
Pair,
boost::multi_index::indexed_by
<
boost::multi_index::ordered_unique<
boost::multi_index::identity<Pair> >,
boost::multi_index::ordered_unique<
boost::multi_index::member<Pair, KeyType, &Pair::first> >,
boost::multi_index::ordered_unique<
boost::multi_index::member<Pair, T, &Pair::second> >
>
> ImplSet;
typedef typename ImplSet::nth_index<0>::type Index0;
};
//explicit (DLL) instantiation
template struct TESTS_CLASS Container<Tests::Foo1234567890>;
This is due to the long names and using three indexes with
boost::multi_index. It seems that this boost library touches the limits
of the compiler.
Anyone a clue others than not using boost, stripping long names or
switching to gcc?
Wkr,
me
| |
| P.J. Plauger 2006-05-24, 10:06 pm |
| <gast128@hotmail.com> wrote in message
news:1148512167.647926.233410@j55g2000cwa.googlegroups.com...
> we have a large sln consisting of 95 projects and about 3000 classes.
> Lately we ran in all sorts of compiler errors (C1001, C1055 and PRJ0002
> with buffer overrun).
>
> For example the following code snippet gives c1001 (/D "_DEBUG" /Gm
> /EHsc /RTC1 /MDd /Zc:wchar_t /GR /W4 /WX /c /Wp64 /ZI /TP):
>
> //omitted includes
>
> namespace Tests
> {
> struct Foo1234567890 {};
>
> struct Foo1234567890123456789012345678901234567
890;
> typedef Foo1234567890123456789012345678901234567
890* KeyType;
> }
>
>
> template <typename T>
> struct Container
> {
> typedef Tests::KeyType KeyType;
> typedef typename std::pair<KeyType, T> Pair;
>
> typedef typename boost::multi_index::multi_index_containe
r
> <
> Pair,
> boost::multi_index::indexed_by
> <
> boost::multi_index::ordered_unique<
> boost::multi_index::identity<Pair> >,
> boost::multi_index::ordered_unique<
> boost::multi_index::member<Pair, KeyType, &Pair::first> >,
> boost::multi_index::ordered_unique<
> boost::multi_index::member<Pair, T, &Pair::second> >
>
> typedef typename ImplSet::nth_index<0>::type Index0;
> };
>
>
> //explicit (DLL) instantiation
> template struct TESTS_CLASS Container<Tests::Foo1234567890>;
>
> This is due to the long names and using three indexes with
> boost::multi_index. It seems that this boost library touches the limits
> of the compiler.
>
> Anyone a clue others than not using boost, stripping long names or
> switching to gcc?
We've had good luck dropping the /Gm.
P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
| |
| gast128@hotmail.com 2006-05-25, 8:16 am |
| Thx, this eems to help.
| |
| gast128@hotmail.com 2006-05-25, 8:16 am |
| Dear all,
It is probably indeed related to the minimal rebuild option. Above code
compiles fine the first time. If one changes the code slightly (e.g.
changing 'KeyType') it pops up again with C1001. Removing the idb file,
and the previous rejected code compiles fine again.
Wkr,
me
|
|
|
|
|