summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Slice/Parser.cpp')
-rw-r--r--cpp/src/Slice/Parser.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index aa48414bbec..c3d9a1958b1 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -232,7 +232,7 @@ Slice::Contained::Contained(const ContainerPtr& container, const string& name) :
void
Slice::Container::destroy()
{
- for_each(_contents.begin(), _contents.end(), ::IceUtil::voidMemFun(&Contained::destroy));
+ for_each(_contents.begin(), _contents.end(), ::IceUtil::voidMemFun(&SyntaxTreeBase::destroy));
_contents.clear();
_introducedMap.clear();
SyntaxTreeBase::destroy();
@@ -313,7 +313,7 @@ Slice::Container::createClassDef(const string& name, bool intf, const ClassList&
}
if(!differsOnlyInCase)
{
- string msg = "redefinition of ";
+ msg = "redefinition of ";
msg += intf ? "interface" : "class";
msg += " `" + name + "'";
_unit->error(msg);
@@ -1535,9 +1535,21 @@ Slice::Constructed::isLocal() const
ConstructedList
Slice::Constructed::dependencies()
{
- set<ConstructedPtr> result;
- recDependencies(result);
- return ConstructedList(result.begin(), result.end());
+ set<ConstructedPtr> resultSet;
+ recDependencies(resultSet);
+
+#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
+ // TODO: find a more usable work-around for this std lib limitation
+ ConstructedList result;
+ set<ConstructedPtr>::iterator it = resultSet.begin();
+ while(it != resultSet.end())
+ {
+ result.push_back(*it++);
+ }
+ return result;
+#else
+ return ConstructedList(resultSet.begin(), resultSet.end());
+#endif
}
Slice::Constructed::Constructed(const ContainerPtr& container, const string& name, bool local) :