static RCP<Import<LocalOrdinal, GlobalOrdinal, Node> > Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &source, const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &target) {
      XPETRA_MONITOR("ImportFactory::Build");
      TEUCHOS_TEST_FOR_EXCEPTION(source->lib() != target->lib(), Xpetra::Exceptions::RuntimeError, "");

#ifdef HAVE_XPETRA_TPETRA
#ifdef HAVE_XPETRA_TPETRA_INST_INT_INT
      if (source->lib() == UseTpetra)
        return rcp( new TpetraImport<LocalOrdinal, GlobalOrdinal, Node>(source, target));
#else
      XPETRA_TPETRA_ETI_EXCEPTION("ImportFactory<int,int>", "TpetraImport<int,int>", "int");
#endif
#endif

#ifdef HAVE_XPETRA_EPETRA
#ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
      if (source->lib() == UseEpetra)
        return rcp( new EpetraImportT<int,Node>(source, target));
#endif
#endif

      XPETRA_FACTORY_END;
    }
 //! Copy constructor.
 TpetraExport(const Export< LocalOrdinal, GlobalOrdinal, Node > &rhs) {
   XPETRA_TPETRA_ETI_EXCEPTION("TpetraExport<int,int>", "TpetraExport<int,int>", "int");
 }
 //! Constructor (with list of parameters).
 TpetraExport(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist) {
   XPETRA_TPETRA_ETI_EXCEPTION("TpetraExport<int,int>", "TpetraExport<int,int>", "int");
 }
 //! TpetraImport constructor to wrap a Tpetra::Import object
 TpetraImport(const RCP<const Tpetra::Import< LocalOrdinal, GlobalOrdinal, Node > > &import) {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "long long", typeid(EpetraNode).name() );
 }
 //! Constructor (with list of parameters).
 TpetraImport(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target, const Teuchos::RCP< Teuchos::ParameterList > &plist) {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "long long", typeid(EpetraNode).name() );
 }
 //! Copy constructor.
 TpetraImport(const Import< LocalOrdinal, GlobalOrdinal, Node > &import) {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "int", typeid(EpetraNode).name() );
 }
 //! Construct an Import from the source and target Maps.
 TpetraImport(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target) {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraImport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "int", typeid(EpetraNode).name() );
 }
 //! Copy constructor.
 TpetraExport(const Export< LocalOrdinal, GlobalOrdinal, Node > &rhs) {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraExport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraExport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "long long", typeid(EpetraNode).name() );
 }
 //! TpetraExport constructor to wrap a Tpetra::Export object
 TpetraExport(const RCP<const Tpetra::Export< LocalOrdinal, GlobalOrdinal, Node > > &exp)  {
   XPETRA_TPETRA_ETI_EXCEPTION( typeid(TpetraExport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name() , typeid(TpetraExport<LocalOrdinal,GlobalOrdinal,EpetraNode>).name(), "int", typeid(EpetraNode).name() );
 }