aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2008-06-15 11:28:45 +0100
committerAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2008-06-15 11:28:45 +0100
commite5cf28cc1179dbeb60964bb512ac12005735d3f3 (patch)
treee32987394056842d47961277179883b73b0e6dc2
parentb1d99a312a499e6c3596ab61f91b1632e7049b2a (diff)
downloadpaludis-e5cf28cc1179dbeb60964bb512ac12005735d3f3.tar.gz
paludis-e5cf28cc1179dbeb60964bb512ac12005735d3f3.tar.xz
Make more use of 'extern template', where supported.
Squashed commit of the following: commit bccc569cc57d95f41fb8aa8b210b3d514956f9fe Author: Ciaran McCreesh <ciaran.mccreesh@googlemail.com> Date: Sun Jun 15 10:39:55 2008 +0100 moar commit 034f2bfb4500241b6099874a130793953e2a7761 Author: Ciaran McCreesh <ciaran.mccreesh@googlemail.com> Date: Sun Jun 15 01:34:17 2008 +0100 moar commit 61503b051a8f238aa9efb6e418d76ff83b8890cd Author: Ciaran McCreesh <ciaran.mccreesh@googlemail.com> Date: Sat Jun 14 20:57:29 2008 +0100 moar commit fbb1e2d113e5bb69a24218f04b06198b4ee7febf Author: Ciaran McCreesh <ciaran.mccreesh@googlemail.com> Date: Sat Jun 14 20:35:25 2008 +0100 start
-rw-r--r--paludis/action.cc66
-rw-r--r--paludis/action.hh47
-rw-r--r--paludis/condition_tracker.cc3
-rw-r--r--paludis/condition_tracker.hh5
-rw-r--r--paludis/contents.cc14
-rw-r--r--paludis/contents.hh23
-rw-r--r--paludis/dep_label.cc137
-rw-r--r--paludis/dep_label.hh119
-rw-r--r--paludis/util/visitor.hh4
9 files changed, 371 insertions, 47 deletions
diff --git a/paludis/action.cc b/paludis/action.cc
index 7b36471..031aecc 100644
--- a/paludis/action.cc
+++ b/paludis/action.cc
@@ -29,25 +29,6 @@ using namespace paludis;
#include <paludis/action-se.cc>
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstallAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, ConfigAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InfoAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstalledAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, UninstallAction>;
-template class AcceptInterfaceVisitsThis<ActionVisitorTypes, FetchAction>;
-
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstallAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<ConfigAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InfoAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstalledAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<UninstallAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<FetchAction> >;
-template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendFetchAction> >;
-
-template class Sequence<FetchActionFailure>;
-
Action::~Action()
{
}
@@ -305,3 +286,50 @@ InfoActionError::InfoActionError(const std::string & msg) throw () :
{
}
+template class AcceptInterface<ActionVisitorTypes>;
+template class AcceptInterface<SupportsActionTestVisitorTypes>;
+
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, ConfigAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, FetchAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InfoAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstallAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstalledAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendFetchAction>;
+template class AcceptInterfaceVisitsThis<ActionVisitorTypes, UninstallAction>;
+
+template class Visits<ConfigAction>;
+template class Visits<FetchAction>;
+template class Visits<InfoAction>;
+template class Visits<InstallAction>;
+template class Visits<InstalledAction>;
+template class Visits<PretendAction>;
+template class Visits<PretendFetchAction>;
+template class Visits<UninstallAction>;
+
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<ConfigAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<FetchAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InfoAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstallAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstalledAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendFetchAction> >;
+template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<UninstallAction> >;
+
+template class Visits<SupportsActionTest<ConfigAction> >;
+template class Visits<SupportsActionTest<FetchAction> >;
+template class Visits<SupportsActionTest<InfoAction> >;
+template class Visits<SupportsActionTest<InstallAction> >;
+template class Visits<SupportsActionTest<InstalledAction> >;
+template class Visits<SupportsActionTest<PretendAction> >;
+template class Visits<SupportsActionTest<PretendFetchAction> >;
+template class Visits<SupportsActionTest<UninstallAction> >;
+
+template class PrivateImplementationPattern<FetchAction>;
+template class PrivateImplementationPattern<InstallAction>;
+template class PrivateImplementationPattern<PretendAction>;
+template class PrivateImplementationPattern<PretendFetchAction>;
+template class PrivateImplementationPattern<UninstallAction>;
+
+template class Sequence<FetchActionFailure>;
+
diff --git a/paludis/action.hh b/paludis/action.hh
index af6b3c5..5cb506f 100644
--- a/paludis/action.hh
+++ b/paludis/action.hh
@@ -482,6 +482,53 @@ namespace paludis
///\}
};
+
+#ifdef PALUDIS_HAVE_EXTERN_TEMPLATE
+ extern template class AcceptInterface<ActionVisitorTypes>;
+ extern template class AcceptInterface<SupportsActionTestVisitorTypes>;
+
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, ConfigAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, FetchAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InfoAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstallAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, InstalledAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, PretendFetchAction>;
+ extern template class AcceptInterfaceVisitsThis<ActionVisitorTypes, UninstallAction>;
+
+ extern template class Visits<ConfigAction>;
+ extern template class Visits<FetchAction>;
+ extern template class Visits<InfoAction>;
+ extern template class Visits<InstallAction>;
+ extern template class Visits<InstalledAction>;
+ extern template class Visits<PretendAction>;
+ extern template class Visits<PretendFetchAction>;
+ extern template class Visits<UninstallAction>;
+
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<ConfigAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<FetchAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InfoAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstallAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<InstalledAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<PretendFetchAction> >;
+ extern template class AcceptInterfaceVisitsThis<SupportsActionTestVisitorTypes, SupportsActionTest<UninstallAction> >;
+
+ extern template class Visits<SupportsActionTest<ConfigAction> >;
+ extern template class Visits<SupportsActionTest<FetchAction> >;
+ extern template class Visits<SupportsActionTest<InfoAction> >;
+ extern template class Visits<SupportsActionTest<InstallAction> >;
+ extern template class Visits<SupportsActionTest<InstalledAction> >;
+ extern template class Visits<SupportsActionTest<PretendAction> >;
+ extern template class Visits<SupportsActionTest<PretendFetchAction> >;
+ extern template class Visits<SupportsActionTest<UninstallAction> >;
+
+ extern template class PrivateImplementationPattern<FetchAction>;
+ extern template class PrivateImplementationPattern<InstallAction>;
+ extern template class PrivateImplementationPattern<PretendAction>;
+ extern template class PrivateImplementationPattern<PretendFetchAction>;
+ extern template class PrivateImplementationPattern<UninstallAction>;
+#endif
}
#endif
diff --git a/paludis/condition_tracker.cc b/paludis/condition_tracker.cc
index 8c838e6..1125baa 100644
--- a/paludis/condition_tracker.cc
+++ b/paludis/condition_tracker.cc
@@ -142,3 +142,6 @@ ConditionTracker::visit_leaf(const NamedSetDepSpec &)
throw InternalError(PALUDIS_HERE, "ConditionTracker saw a NamedSetDepSpec");
}
+template class ConstVisitor<DependencySpecTree>;
+template class ConstVisitor<DependencySpecTree>::VisitConstSequence<ConditionTracker, AllDepSpec>;
+
diff --git a/paludis/condition_tracker.hh b/paludis/condition_tracker.hh
index 30a7030..10525a7 100644
--- a/paludis/condition_tracker.hh
+++ b/paludis/condition_tracker.hh
@@ -98,6 +98,11 @@ namespace paludis
///\}
};
+
+#ifdef PALUDIS_HAVE_EXTERN_TEMPLATE
+ extern template class ConstVisitor<DependencySpecTree>;
+ extern template class ConstVisitor<DependencySpecTree>::VisitConstSequence<ConditionTracker, AllDepSpec>;
+#endif
}
#endif
diff --git a/paludis/contents.cc b/paludis/contents.cc
index 70a2e1f..01f71af 100644
--- a/paludis/contents.cc
+++ b/paludis/contents.cc
@@ -25,15 +25,21 @@
using namespace paludis;
-template class ConstVisitor<ContentsVisitorTypes>;
+template class InstantiationPolicy<ContentsEntry, instantiation_method::NonCopyableTag>;
+template class InstantiationPolicy<Contents, instantiation_method::NonCopyableTag>;
+
template class ConstAcceptInterface<ContentsVisitorTypes>;
template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsFileEntry>;
template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsDirEntry>;
-template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsSymEntry>;
+template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsMiscEntry>;
template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsFifoEntry>;
template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsDevEntry>;
-template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsMiscEntry>;
+template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsSymEntry>;
+
+template class PrivateImplementationPattern<Contents>;
+
+template class WrappedForwardIterator<Contents::ConstIteratorTag, const std::tr1::shared_ptr<const ContentsEntry> >;
template class Visits<const ContentsFileEntry>;
template class Visits<const ContentsDirEntry>;
@@ -42,8 +48,6 @@ template class Visits<const ContentsFifoEntry>;
template class Visits<const ContentsDevEntry>;
template class Visits<const ContentsMiscEntry>;
-template class WrappedForwardIterator<Contents::ConstIteratorTag, const std::tr1::shared_ptr<const ContentsEntry> >;
-
ContentsEntry::ContentsEntry(const std::string & n) :
_name(n)
{
diff --git a/paludis/contents.hh b/paludis/contents.hh
index 45bf913..f357698 100644
--- a/paludis/contents.hh
+++ b/paludis/contents.hh
@@ -260,6 +260,29 @@ namespace paludis
///\}
};
+
+#ifdef PALUDIS_HAVE_EXTERN_TEMPLATE
+ extern template class InstantiationPolicy<ContentsEntry, instantiation_method::NonCopyableTag>;
+ extern template class InstantiationPolicy<Contents, instantiation_method::NonCopyableTag>;
+
+ extern template class ConstAcceptInterface<ContentsVisitorTypes>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsFileEntry>;
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsDirEntry>;
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsMiscEntry>;
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsFifoEntry>;
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsDevEntry>;
+ extern template class ConstAcceptInterfaceVisitsThis<ContentsVisitorTypes, ContentsSymEntry>;
+
+ extern template class PrivateImplementationPattern<Contents>;
+
+ extern template class Visits<const ContentsFileEntry>;
+ extern template class Visits<const ContentsDirEntry>;
+ extern template class Visits<const ContentsSymEntry>;
+ extern template class Visits<const ContentsFifoEntry>;
+ extern template class Visits<const ContentsDevEntry>;
+ extern template class Visits<const ContentsMiscEntry>;
+#endif
}
#endif
diff --git a/paludis/dep_label.cc b/paludis/dep_label.cc
index cccf54f..f0f851b 100644
--- a/paludis/dep_label.cc
+++ b/paludis/dep_label.cc
@@ -87,13 +87,6 @@ ConcreteURILabel<T_>::text() const
return _imp->text;
}
-template class ConcreteURILabel<URIMirrorsThenListedLabel::Tag>;
-template class ConcreteURILabel<URIMirrorsOnlyLabel::Tag>;
-template class ConcreteURILabel<URIListedOnlyLabel::Tag>;
-template class ConcreteURILabel<URIListedThenMirrorsLabel::Tag>;
-template class ConcreteURILabel<URILocalMirrorsOnlyLabel::Tag>;
-template class ConcreteURILabel<URIManualOnlyLabel::Tag>;
-
std::ostream & operator<<(std::ostream & s, const DependencyLabel & l)
{
s << l.text();
@@ -312,18 +305,120 @@ ActiveDependencyLabels::suggest_labels() const
return _imp->suggest_labels;
}
-template class ConcreteDependencyLabel<DependencyHostLabel::Tag, DependencySystemLabel>;
-template class ConcreteDependencyLabel<DependencyTargetLabel::Tag, DependencySystemLabel>;
-template class ConcreteDependencyLabel<DependencyBuildLabel::Tag, DependencyTypeLabel>;
-template class ConcreteDependencyLabel<DependencyRunLabel::Tag, DependencyTypeLabel>;
-template class ConcreteDependencyLabel<DependencyPostLabel::Tag, DependencyTypeLabel>;
-template class ConcreteDependencyLabel<DependencyInstallLabel::Tag, DependencyTypeLabel>;
-template class ConcreteDependencyLabel<DependencyCompileLabel::Tag, DependencyTypeLabel>;
-template class ConcreteDependencyLabel<DependencySuggestedLabel::Tag, DependencySuggestLabel>;
-template class ConcreteDependencyLabel<DependencyRecommendedLabel::Tag, DependencySuggestLabel>;
-template class ConcreteDependencyLabel<DependencyRequiredLabel::Tag, DependencySuggestLabel>;
-template class ConcreteDependencyLabel<DependencyAnyLabel::Tag, DependencyABIsLabel>;
-template class ConcreteDependencyLabel<DependencyMineLabel::Tag, DependencyABIsLabel>;
-template class ConcreteDependencyLabel<DependencyPrimaryLabel::Tag, DependencyABIsLabel>;
-template class ConcreteDependencyLabel<DependencyABILabel::Tag, DependencyABIsLabel>;
+template class ConstAcceptInterface<DependencyABIsLabelVisitorTypes>;
+template class ConstAcceptInterface<DependencyLabelVisitorTypes>;
+template class ConstAcceptInterface<DependencySuggestLabelVisitorTypes>;
+template class ConstAcceptInterface<DependencySystemLabelVisitorTypes>;
+template class ConstAcceptInterface<DependencyTypeLabelVisitorTypes>;
+template class ConstAcceptInterface<URILabelVisitorTypes>;
+
+template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencyABIsLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencySuggestLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencySystemLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencyTypeLabel>;
+
+template class Visits<DependencyABIsLabel>;
+template class Visits<DependencySuggestLabel>;
+template class Visits<DependencySystemLabel>;
+template class Visits<DependencyTypeLabel>;
+
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIMirrorsThenListedLabel>;
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIMirrorsOnlyLabel>;
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIListedOnlyLabel>;
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIListedThenMirrorsLabel>;
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URILocalMirrorsOnlyLabel>;
+template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIManualOnlyLabel>;
+
+template class Visits<URIMirrorsThenListedLabel>;
+template class Visits<URIMirrorsOnlyLabel>;
+template class Visits<URIListedOnlyLabel>;
+template class Visits<URIListedThenMirrorsLabel>;
+template class Visits<URILocalMirrorsOnlyLabel>;
+template class Visits<URIManualOnlyLabel>;
+
+// template class ConstAcceptInterfaceVisitsThis<DependencySystemLabelVisitorTypes, DependencySystemLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencySystemLabelVisitorTypes, DependencyHostLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencySystemLabelVisitorTypes, DependencyTargetLabel>;
+
+template class Visits<DependencyHostLabel>;
+template class Visits<DependencyTargetLabel>;
+
+template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyBuildLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyRunLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyPostLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyInstallLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyCompileLabel>;
+
+template class Visits<DependencyBuildLabel>;
+template class Visits<DependencyRunLabel>;
+template class Visits<DependencyPostLabel>;
+template class Visits<DependencyInstallLabel>;
+template class Visits<DependencyCompileLabel>;
+
+template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencySuggestedLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencyRecommendedLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencyRequiredLabel>;
+
+template class Visits<DependencySuggestedLabel>;
+template class Visits<DependencyRecommendedLabel>;
+template class Visits<DependencyRequiredLabel>;
+
+template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyAnyLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyMineLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyPrimaryLabel>;
+template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyABILabel>;
+
+template class Visits<DependencyAnyLabel>;
+template class Visits<DependencyMineLabel>;
+template class Visits<DependencyPrimaryLabel>;
+template class Visits<DependencyABILabel>;
+
+template class InstantiationPolicy<DependencyLabel, instantiation_method::NonCopyableTag>;
+template class InstantiationPolicy<URILabel, instantiation_method::NonCopyableTag>;
+
+template class ConcreteDependencyLabel<DependencyHostLabelTag, DependencySystemLabel>;
+template class ConcreteDependencyLabel<DependencyTargetLabelTag, DependencySystemLabel>;
+template class ConcreteDependencyLabel<DependencyBuildLabelTag, DependencyTypeLabel>;
+template class ConcreteDependencyLabel<DependencyRunLabelTag, DependencyTypeLabel>;
+template class ConcreteDependencyLabel<DependencyPostLabelTag, DependencyTypeLabel>;
+template class ConcreteDependencyLabel<DependencyInstallLabelTag, DependencyTypeLabel>;
+template class ConcreteDependencyLabel<DependencyCompileLabelTag, DependencyTypeLabel>;
+template class ConcreteDependencyLabel<DependencySuggestedLabelTag, DependencySuggestLabel>;
+template class ConcreteDependencyLabel<DependencyRecommendedLabelTag, DependencySuggestLabel>;
+template class ConcreteDependencyLabel<DependencyRequiredLabelTag, DependencySuggestLabel>;
+template class ConcreteDependencyLabel<DependencyAnyLabelTag, DependencyABIsLabel>;
+template class ConcreteDependencyLabel<DependencyMineLabelTag, DependencyABIsLabel>;
+template class ConcreteDependencyLabel<DependencyPrimaryLabelTag, DependencyABIsLabel>;
+template class ConcreteDependencyLabel<DependencyABILabelTag, DependencyABIsLabel>;
+
+template class ConcreteURILabel<URIMirrorsThenListedLabelTag>;
+template class ConcreteURILabel<URIMirrorsOnlyLabelTag>;
+template class ConcreteURILabel<URIListedOnlyLabelTag>;
+template class ConcreteURILabel<URIListedThenMirrorsLabelTag>;
+template class ConcreteURILabel<URILocalMirrorsOnlyLabelTag>;
+template class ConcreteURILabel<URIManualOnlyLabelTag>;
+
+template class PrivateImplementationPattern<ConcreteURILabel<URIMirrorsThenListedLabel> >;
+template class PrivateImplementationPattern<ConcreteURILabel<URIMirrorsOnlyLabel> >;
+template class PrivateImplementationPattern<ConcreteURILabel<URIListedOnlyLabel> >;
+template class PrivateImplementationPattern<ConcreteURILabel<URIListedThenMirrorsLabel> >;
+template class PrivateImplementationPattern<ConcreteURILabel<URILocalMirrorsOnlyLabel> >;
+template class PrivateImplementationPattern<ConcreteURILabel<URIManualOnlyLabel> >;
+
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyHostLabelTag, DependencySystemLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyTargetLabelTag, DependencySystemLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyBuildLabelTag, DependencyTypeLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRunLabelTag, DependencyTypeLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyPostLabelTag, DependencyTypeLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyInstallLabelTag, DependencyTypeLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyCompileLabelTag, DependencyTypeLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencySuggestedLabelTag, DependencySuggestLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRecommendedLabelTag, DependencySuggestLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRequiredLabelTag, DependencySuggestLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyAnyLabelTag, DependencyABIsLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyMineLabelTag, DependencyABIsLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyPrimaryLabelTag, DependencyABIsLabel> >;
+template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyABILabelTag, DependencyABIsLabel> >;
+
+template class PrivateImplementationPattern<ActiveDependencyLabels>;
diff --git a/paludis/dep_label.hh b/paludis/dep_label.hh
index bc69624..590774c 100644
--- a/paludis/dep_label.hh
+++ b/paludis/dep_label.hh
@@ -371,6 +371,125 @@ namespace paludis
///\}
};
+
+#ifdef PALUDIS_HAVE_EXTERN_TEMPLATE
+ extern template class ConstAcceptInterface<DependencyABIsLabelVisitorTypes>;
+ extern template class ConstAcceptInterface<DependencyLabelVisitorTypes>;
+ extern template class ConstAcceptInterface<DependencySuggestLabelVisitorTypes>;
+ extern template class ConstAcceptInterface<DependencySystemLabelVisitorTypes>;
+ extern template class ConstAcceptInterface<DependencyTypeLabelVisitorTypes>;
+ extern template class ConstAcceptInterface<URILabelVisitorTypes>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencyABIsLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencySuggestLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencySystemLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyLabelVisitorTypes, DependencyTypeLabel>;
+
+ extern template class Visits<DependencyABIsLabel>;
+ extern template class Visits<DependencySuggestLabel>;
+ extern template class Visits<DependencySystemLabel>;
+ extern template class Visits<DependencyTypeLabel>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIMirrorsThenListedLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIMirrorsOnlyLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIListedOnlyLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIListedThenMirrorsLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URILocalMirrorsOnlyLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<URILabelVisitorTypes, URIManualOnlyLabel>;
+
+ extern template class Visits<URIMirrorsThenListedLabel>;
+ extern template class Visits<URIMirrorsOnlyLabel>;
+ extern template class Visits<URIListedOnlyLabel>;
+ extern template class Visits<URIListedThenMirrorsLabel>;
+ extern template class Visits<URILocalMirrorsOnlyLabel>;
+ extern template class Visits<URIManualOnlyLabel>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<DependencySystemLabelVisitorTypes, DependencyHostLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencySystemLabelVisitorTypes, DependencyTargetLabel>;
+
+ extern template class Visits<DependencySystemLabel>;
+ extern template class Visits<DependencyHostLabel>;
+ extern template class Visits<DependencyTargetLabel>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyBuildLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyRunLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyPostLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyInstallLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyTypeLabelVisitorTypes, DependencyCompileLabel>;
+
+ extern template class Visits<DependencyBuildLabel>;
+ extern template class Visits<DependencyRunLabel>;
+ extern template class Visits<DependencyPostLabel>;
+ extern template class Visits<DependencyInstallLabel>;
+ extern template class Visits<DependencyCompileLabel>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencySuggestedLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencyRecommendedLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencySuggestLabelVisitorTypes, DependencyRequiredLabel>;
+
+ extern template class Visits<DependencySuggestedLabel>;
+ extern template class Visits<DependencyRecommendedLabel>;
+ extern template class Visits<DependencyRequiredLabel>;
+
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyAnyLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyMineLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyPrimaryLabel>;
+ extern template class ConstAcceptInterfaceVisitsThis<DependencyABIsLabelVisitorTypes, DependencyABILabel>;
+
+ extern template class Visits<DependencyAnyLabel>;
+ extern template class Visits<DependencyMineLabel>;
+ extern template class Visits<DependencyPrimaryLabel>;
+ extern template class Visits<DependencyABILabel>;
+
+ extern template class InstantiationPolicy<DependencyLabel, instantiation_method::NonCopyableTag>;
+ extern template class InstantiationPolicy<URILabel, instantiation_method::NonCopyableTag>;
+
+ extern template class ConcreteDependencyLabel<DependencyHostLabelTag, DependencySystemLabel>;
+ extern template class ConcreteDependencyLabel<DependencyTargetLabelTag, DependencySystemLabel>;
+ extern template class ConcreteDependencyLabel<DependencyBuildLabelTag, DependencyTypeLabel>;
+ extern template class ConcreteDependencyLabel<DependencyRunLabelTag, DependencyTypeLabel>;
+ extern template class ConcreteDependencyLabel<DependencyPostLabelTag, DependencyTypeLabel>;
+ extern template class ConcreteDependencyLabel<DependencyInstallLabelTag, DependencyTypeLabel>;
+ extern template class ConcreteDependencyLabel<DependencyCompileLabelTag, DependencyTypeLabel>;
+ extern template class ConcreteDependencyLabel<DependencySuggestedLabelTag, DependencySuggestLabel>;
+ extern template class ConcreteDependencyLabel<DependencyRecommendedLabelTag, DependencySuggestLabel>;
+ extern template class ConcreteDependencyLabel<DependencyRequiredLabelTag, DependencySuggestLabel>;
+ extern template class ConcreteDependencyLabel<DependencyAnyLabelTag, DependencyABIsLabel>;
+ extern template class ConcreteDependencyLabel<DependencyMineLabelTag, DependencyABIsLabel>;
+ extern template class ConcreteDependencyLabel<DependencyPrimaryLabelTag, DependencyABIsLabel>;
+ extern template class ConcreteDependencyLabel<DependencyABILabelTag, DependencyABIsLabel>;
+
+ extern template class ConcreteURILabel<URIMirrorsThenListedLabelTag>;
+ extern template class ConcreteURILabel<URIMirrorsOnlyLabelTag>;
+ extern template class ConcreteURILabel<URIListedOnlyLabelTag>;
+ extern template class ConcreteURILabel<URIListedThenMirrorsLabelTag>;
+ extern template class ConcreteURILabel<URILocalMirrorsOnlyLabelTag>;
+ extern template class ConcreteURILabel<URIManualOnlyLabelTag>;
+
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URIMirrorsThenListedLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URIMirrorsOnlyLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URIListedOnlyLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URIListedThenMirrorsLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URILocalMirrorsOnlyLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteURILabel<URIManualOnlyLabel> >;
+
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyHostLabelTag, DependencySystemLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyTargetLabelTag, DependencySystemLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyBuildLabelTag, DependencyTypeLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRunLabelTag, DependencyTypeLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyPostLabelTag, DependencyTypeLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyInstallLabelTag, DependencyTypeLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyCompileLabelTag, DependencyTypeLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencySuggestedLabelTag, DependencySuggestLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRecommendedLabelTag, DependencySuggestLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyRequiredLabelTag, DependencySuggestLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyAnyLabelTag, DependencyABIsLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyMineLabelTag, DependencyABIsLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyPrimaryLabelTag, DependencyABIsLabel> >;
+ extern template class PrivateImplementationPattern<ConcreteDependencyLabel<DependencyABILabelTag, DependencyABIsLabel> >;
+
+ extern template class PrivateImplementationPattern<ActiveDependencyLabels>;
+#endif
}
#endif
diff --git a/paludis/util/visitor.hh b/paludis/util/visitor.hh
index 4998784..e848812 100644
--- a/paludis/util/visitor.hh
+++ b/paludis/util/visitor.hh
@@ -1113,7 +1113,7 @@ namespace paludis
* \ingroup g_visitors
*/
template <typename H_>
- class ConstVisitor :
+ class PALUDIS_VISIBLE ConstVisitor :
public virtual Visits<const typename H_::ContainedItem1>,
public virtual Visits<const typename H_::ContainedItem2>,
public virtual Visits<const typename H_::ContainedItem3>,
@@ -1252,7 +1252,7 @@ namespace paludis
* \ingroup g_visitors
*/
template <typename H_>
- class Visitor :
+ class PALUDIS_VISIBLE Visitor :
public virtual Visits<typename H_::ContainedItem1>,
public virtual Visits<typename H_::ContainedItem2>,
public virtual Visits<typename H_::ContainedItem3>,