|
Boost : |
From: Simon Atanasyan (atanasyan_at_[hidden])
Date: 2006-10-05 02:21:58
2006/9/30, Douglas Gregor <doug.gregor_at_[hidden]>:
> On Sep 29, 2006, at 4:02 PM, Simon Atanasyan wrote:
> > 2006/9/29, Doug Gregor <dgregor_at_[hidden]>:
> >> The failure is also shown here: http://tinyurl.com/zarxo
> > I will look at compiler source code and try to fix this bug :-)
>
> If you happen to find a way we can work around the problem in Boost,
> we'll do it. This isn't super-critical code in Boost, but it's the
> only thing in the Graph library that doesn't compile with Sun.
There are two bugs in the Sun C++ related to this problem. The first
one - compiler does not recognize name of partially specialized class
when the name is used without template arguments.
% cat test.cc
struct C
{
static const int value = 0;
};
template <typename T1, typename T2>
struct S;
template <typename T>
struct S<int, T>
{
typedef C type;
static const int value = S::type::value; // This works static
const int value = type::value;
};
S<int, int> v;
% CC -c test.cc
"test.cc", line 13: Error: No parameters provided for template.
"test.cc", line 16: Where: While specializing "S<int, int>".
"test.cc", line 16: Where: Specialized in non-template code.
"test.cc", line 13: Error: An integer constant expression is required here.
"test.cc", line 16: Where: While specializing "S<int, int>".
"test.cc", line 16: Where: Specialized in non-template code.
2 Error(s) detected.
Workaround is obvious. Anyway I plan to fix this bug.
The second error is unclear for me. It looks like compiler confused by
expression as a template argument of int_ class. Unfortunately trivial
test case works fine so I have to investigate further.
-- Simon Atanasyan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk