aboutsummaryrefslogtreecommitdiff
path: root/odb
diff options
context:
space:
mode:
Diffstat (limited to 'odb')
-rw-r--r--odb/context.cxx4
-rw-r--r--odb/context.hxx16
-rw-r--r--odb/processor.cxx21
-rw-r--r--odb/relational/common.hxx26
-rw-r--r--odb/relational/common.txx2
-rw-r--r--odb/relational/context.cxx1
-rw-r--r--odb/relational/context.hxx6
-rw-r--r--odb/relational/context.ixx7
-rw-r--r--odb/relational/header.hxx34
-rw-r--r--odb/relational/inline.hxx4
-rw-r--r--odb/relational/model.hxx6
-rw-r--r--odb/relational/mssql/common.cxx25
-rw-r--r--odb/relational/mssql/common.hxx9
-rw-r--r--odb/relational/mysql/common.cxx29
-rw-r--r--odb/relational/mysql/common.hxx9
-rw-r--r--odb/relational/mysql/context.cxx24
-rw-r--r--odb/relational/mysql/context.hxx5
-rw-r--r--odb/relational/oracle/common.cxx29
-rw-r--r--odb/relational/oracle/common.hxx9
-rw-r--r--odb/relational/pgsql/common.cxx25
-rw-r--r--odb/relational/pgsql/common.hxx9
-rw-r--r--odb/relational/pgsql/context.cxx22
-rw-r--r--odb/relational/pgsql/context.hxx5
-rw-r--r--odb/relational/pgsql/source.cxx10
-rw-r--r--odb/relational/processor.cxx25
-rw-r--r--odb/relational/source.cxx8
-rw-r--r--odb/relational/source.hxx112
-rw-r--r--odb/relational/sqlite/common.cxx29
-rw-r--r--odb/relational/sqlite/common.hxx8
-rw-r--r--odb/relational/sqlite/context.cxx22
-rw-r--r--odb/relational/sqlite/context.hxx5
-rw-r--r--odb/validator.cxx4
32 files changed, 314 insertions, 236 deletions
diff --git a/odb/context.cxx b/odb/context.cxx
index 5ce084a..4604a23 100644
--- a/odb/context.cxx
+++ b/odb/context.cxx
@@ -3067,7 +3067,7 @@ namespace
}
virtual void
- traverse_container (semantics::data_member& m, semantics::type& c)
+ traverse_container (semantics::data_member& m, semantics::type&)
{
// Ignore added/deleted members if so requested.
//
@@ -3091,7 +3091,7 @@ namespace
if (context::is_a (member_path_,
member_scope_,
f,
- context::container_vt (c),
+ context::container_vt (m),
"value"))
r_++;
}
diff --git a/odb/context.hxx b/odb/context.hxx
index 6e1d733..5eef193 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -1509,27 +1509,27 @@ public:
}
static semantics::type&
- container_idt (semantics::data_member& m)
+ container_idt (semantics::data_member& m, const custom_cxx_type** trans = 0)
{
- return utype (m, "id");
+ return utype (m, "id", trans);
}
static semantics::type&
- container_vt (semantics::type& c)
+ container_vt (semantics::data_member& m, const custom_cxx_type** trans = 0)
{
- return *c.get<semantics::type*> ("value-tree-type");
+ return utype (m, "value", trans);
}
static semantics::type&
- container_it (semantics::type& c)
+ container_it (semantics::data_member& m, const custom_cxx_type** trans = 0)
{
- return *c.get<semantics::type*> ("index-tree-type");
+ return utype (m, "index", trans);
}
static semantics::type&
- container_kt (semantics::type& c)
+ container_kt (semantics::data_member& m, const custom_cxx_type** trans = 0)
{
- return *c.get<semantics::type*> ("key-tree-type");
+ return utype (m, "key", trans);
}
static bool
diff --git a/odb/processor.cxx b/odb/processor.cxx
index facbbb4..f7a2be2 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -1410,20 +1410,14 @@ namespace
{
ck = t.get<container_kind_type> ("container-kind");
smart = t.get<bool> ("container-smart");
- vt = t.get<semantics::type*> ("value-tree-type");
- vh = t.get<semantics::names*> ("value-tree-hint");
+
+ vt = &utype (m, vh, "value");
if (ck == ck_ordered)
- {
- it = t.get<semantics::type*> ("index-tree-type");
- ih = t.get<semantics::names*> ("index-tree-hint");
- }
+ it = &utype (m, ih, "index");
if (ck == ck_map || ck == ck_multimap)
- {
- kt = t.get<semantics::type*> ("key-tree-type");
- kh = t.get<semantics::names*> ("key-tree-hint");
- }
+ kt = &utype (m, kh, "key");
}
else
{
@@ -1553,6 +1547,7 @@ namespace
t.set ("value-tree-type", vt);
t.set ("value-tree-hint", vh);
+ vt = &utype (m, vh, "value"); // Map.
// If we have a set container, automatically mark the value
// column as not null. If we already have an explicit null for
@@ -1610,9 +1605,10 @@ namespace
throw;
}
+ t.set ("index-not-null", true);
t.set ("index-tree-type", it);
t.set ("index-tree-hint", ih);
- t.set ("index-not-null", true);
+ it = &utype (m, ih, "index"); // Map.
}
// Get the key type for maps.
@@ -1644,9 +1640,10 @@ namespace
throw;
}
+ t.set ("key-not-null", true);
t.set ("key-tree-type", kt);
t.set ("key-tree-hint", kh);
- t.set ("key-not-null", true);
+ kt = &utype (m, kh, "key"); // Map.
}
// Check if we are versioned. For now we are not allowing for
diff --git a/odb/relational/common.hxx b/odb/relational/common.hxx
index bc7e034..9bd2da6 100644
--- a/odb/relational/common.hxx
+++ b/odb/relational/common.hxx
@@ -18,10 +18,12 @@ namespace relational
typedef member_base base;
member_base (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix,
object_section* section = 0)
: type_override_ (type),
+ custom_override_ (ct),
fq_type_override_ (fq_type),
key_prefix_ (key_prefix),
section_ (section)
@@ -30,11 +32,13 @@ namespace relational
member_base (string const& var,
semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix,
object_section* section = 0)
: var_override_ (var),
type_override_ (type),
+ custom_override_ (ct),
fq_type_override_ (fq_type),
key_prefix_ (key_prefix),
section_ (section)
@@ -49,6 +53,7 @@ namespace relational
protected:
string var_override_;
semantics::type* type_override_;
+ const custom_cxx_type* custom_override_;
string fq_type_override_;
string key_prefix_;
object_section* section_;
@@ -122,7 +127,9 @@ namespace relational
return t.fq_name (hint);
}
else
- return fq_type_;
+ // If we are translated, then fq_type_ contains the original type.
+ //
+ return ct == 0 ? fq_type_ : t.fq_name (ct->as_hint);
}
string
@@ -204,12 +211,13 @@ namespace relational
{
typedef member_image_type base;
- member_image_type (semantics::type* type = 0,
+ member_image_type (): member_base (0, 0, string (), string ()) {}
+
+ member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type = string (),
string const& key_prefix = string ())
- : member_base (type, fq_type, key_prefix)
- {
- }
+ : member_base (type, ct, fq_type, key_prefix) {}
// Has to be overriden.
//
@@ -223,12 +231,12 @@ namespace relational
{
typedef member_database_type_id base;
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id (): member_base (0, 0, string (), string ()) {}
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type = string (),
string const& key_prefix = string ())
- : member_base (type, fq_type, key_prefix)
- {
- }
+ : member_base (type, ct, fq_type, key_prefix) {}
// Has to be overriden.
//
diff --git a/odb/relational/common.txx b/odb/relational/common.txx
index 893e16c..5e5c5ac 100644
--- a/odb/relational/common.txx
+++ b/odb/relational/common.txx
@@ -26,7 +26,7 @@ namespace relational
}
bool cq (type_override_ != 0 ? false : const_member (m));
- const custom_cxx_type* ct (0);
+ const custom_cxx_type* ct (type_override_ != 0 ? custom_override_ : 0);
semantics::type& t (type_override_ != 0
? *type_override_
: utype (m, &ct));
diff --git a/odb/relational/context.cxx b/odb/relational/context.cxx
index 5f82103..237ea0c 100644
--- a/odb/relational/context.cxx
+++ b/odb/relational/context.cxx
@@ -118,6 +118,7 @@ namespace relational
bool context::
grow_impl (semantics::data_member&,
semantics::type&,
+ const custom_cxx_type*,
string const&)
{
return false;
diff --git a/odb/relational/context.hxx b/odb/relational/context.hxx
index 45dbba6..02adfc7 100644
--- a/odb/relational/context.hxx
+++ b/odb/relational/context.hxx
@@ -88,7 +88,10 @@ namespace relational
grow (semantics::data_member&);
bool
- grow (semantics::data_member&, semantics::type&, string const& key_prefix);
+ grow (semantics::data_member&,
+ semantics::type&,
+ const custom_cxx_type*,
+ string const& key_prefix);
public:
// Quote SQL string.
@@ -216,6 +219,7 @@ namespace relational
virtual bool
grow_impl (semantics::data_member&,
semantics::type&,
+ const custom_cxx_type*,
string const&);
// The default implementation uses the ISO quoting ('') and
diff --git a/odb/relational/context.ixx b/odb/relational/context.ixx
index b5865cf..6ffb3bb 100644
--- a/odb/relational/context.ixx
+++ b/odb/relational/context.ixx
@@ -17,9 +17,12 @@ namespace relational
}
inline bool context::
- grow (semantics::data_member& m, semantics::type& t, string const& kp)
+ grow (semantics::data_member& m,
+ semantics::type& t,
+ const custom_cxx_type* ct,
+ string const& kp)
{
- return current ().grow_impl (m, t, kp);
+ return current ().grow_impl (m, t, ct, kp);
}
inline context::string context::
diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx
index 63dea09..032884a 100644
--- a/odb/relational/header.hxx
+++ b/odb/relational/header.hxx
@@ -21,17 +21,14 @@ namespace relational
typedef image_member base;
image_member (string const& var = string ())
- : member_base (var, 0, string (), string ())
- {
- }
+ : member_base (var, 0, 0, string (), string ()) {}
image_member (string const& var,
semantics::type& t,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base (var, &t, fq_type, key_prefix)
- {
- }
+ : member_base (var, &t, ct, fq_type, key_prefix) {}
};
template <typename T>
@@ -43,6 +40,7 @@ namespace relational
: member_base::base (x), // virtual base
base (x),
member_image_type_ (base::type_override_,
+ base::custom_override_,
base::fq_type_override_,
base::key_prefix_)
{
@@ -283,7 +281,11 @@ namespace relational
container_kind_type ck (container_kind (c));
- type& vt (container_vt (c));
+ const custom_cxx_type* vct (0);
+ const custom_cxx_type* ict (0);
+ const custom_cxx_type* kct (0);
+
+ type& vt (container_vt (m, &vct));
type* it (0);
type* kt (0);
@@ -296,7 +298,7 @@ namespace relational
{
if (!unordered (m))
{
- it = &container_it (c);
+ it = &container_it (m, &ict);
ordered = true;
}
break;
@@ -304,7 +306,7 @@ namespace relational
case ck_map:
case ck_multimap:
{
- kt = &container_kt (c);
+ kt = &container_kt (m, &kct);
break;
}
case ck_set:
@@ -578,7 +580,7 @@ namespace relational
os << "// index" << endl
<< "//" << endl;
instance<image_member> im (
- "index_", *it, "index_type", "index");
+ "index_", *it, ict, "index_type", "index");
im->traverse (m);
}
break;
@@ -588,7 +590,7 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<image_member> im ("key_", *kt, "key_type", "key");
+ instance<image_member> im ("key_", *kt, kct, "key_type", "key");
im->traverse (m);
break;
}
@@ -597,7 +599,8 @@ namespace relational
{
os << "// value" << endl
<< "//" << endl;
- instance<image_member> im ("value_", vt, "value_type", "value");
+ instance<image_member> im (
+ "value_", vt, vct, "value_type", "value");
im->traverse (m);
break;
}
@@ -620,7 +623,8 @@ namespace relational
{
os << "// index" << endl
<< "//" << endl;
- instance<image_member> im ("index_", *it, "index_type", "index");
+ instance<image_member> im (
+ "index_", *it, ict, "index_type", "index");
im->traverse (m);
}
break;
@@ -630,7 +634,7 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<image_member> im ("key_", *kt, "key_type", "key");
+ instance<image_member> im ("key_", *kt, kct, "key_type", "key");
im->traverse (m);
break;
}
@@ -643,7 +647,7 @@ namespace relational
os << "// value" << endl
<< "//" << endl;
- instance<image_member> im ("value_", vt, "value_type", "value");
+ instance<image_member> im ("value_", vt, vct, "value_type", "value");
im->traverse (m);
os << "std::size_t version;"
diff --git a/odb/relational/inline.hxx b/odb/relational/inline.hxx
index 2bed1da..090779f 100644
--- a/odb/relational/inline.hxx
+++ b/odb/relational/inline.hxx
@@ -22,9 +22,7 @@ namespace relational
typedef null_member base;
null_member (bool get)
- : member_base (string (), 0, string (), string ()), get_ (get)
- {
- }
+ : member_base (0, 0, string (), string ()), get_ (get) {}
protected:
bool get_;
diff --git a/odb/relational/model.hxx b/odb/relational/model.hxx
index 77631e2..00b3b46 100644
--- a/odb/relational/model.hxx
+++ b/odb/relational/model.hxx
@@ -702,7 +702,7 @@ namespace relational
{
bool f (false); //@@ (im)persfect forwarding.
instance<object_columns> oc (model_, t, f);
- oc->traverse (m, container_it (ct), "index", "index");
+ oc->traverse (m, container_it (m), "index", "index");
}
// This is a simple value so the name cannot be empty. It is
@@ -751,7 +751,7 @@ namespace relational
{
bool f (false); //@@ (im)persfect forwarding.
instance<object_columns> oc (model_, t, f);
- oc->traverse (m, container_kt (ct), "key", "key");
+ oc->traverse (m, container_kt (m), "key", "key");
}
// value
@@ -759,7 +759,7 @@ namespace relational
{
bool f (false); //@@ (im)persfect forwarding.
instance<object_columns> oc (model_, t, f);
- oc->traverse (m, container_vt (ct), "value", "value");
+ oc->traverse (m, container_vt (m), "value", "value");
}
}
diff --git a/odb/relational/mssql/common.cxx b/odb/relational/mssql/common.cxx
index e752f76..eb294cc 100644
--- a/odb/relational/mssql/common.cxx
+++ b/odb/relational/mssql/common.cxx
@@ -186,17 +186,18 @@ namespace relational
member_image_type::
member_image_type (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_image_type::
+ member_image_type ()
+ : relational::member_base (0, 0, string (), string ()) {}
member_image_type::
member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : relational::member_base (type, fq_type, key_prefix)
- {
- }
+ : relational::member_base (type, ct, fq_type, key_prefix) {}
string member_image_type::
image_type (semantics::data_member& m)
@@ -344,11 +345,19 @@ namespace relational
}
member_database_type_id::
+ member_database_type_id ()
+ : member_base::base (0, 0, string (), string ()), // virtual base
+ base (0, 0, string (), string ())
+ {
+ }
+
+ member_database_type_id::
member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base::base (type, fq_type, key_prefix), // virtual base
- base (type, fq_type, key_prefix)
+ : member_base::base (type, ct, fq_type, key_prefix), // virtual base
+ base (type, ct, fq_type, key_prefix)
{
}
diff --git a/odb/relational/mssql/common.hxx b/odb/relational/mssql/common.hxx
index eed08df..520b8b1 100644
--- a/odb/relational/mssql/common.hxx
+++ b/odb/relational/mssql/common.hxx
@@ -123,7 +123,9 @@ namespace relational
member_base
{
member_image_type (base const&);
- member_image_type (semantics::type* type = 0,
+ member_image_type ();
+ member_image_type (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
virtual string
@@ -194,8 +196,9 @@ namespace relational
member_base
{
member_database_type_id (base const&);
-
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id ();
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
diff --git a/odb/relational/mysql/common.cxx b/odb/relational/mysql/common.cxx
index 98edfcd..a8f4668 100644
--- a/odb/relational/mysql/common.cxx
+++ b/odb/relational/mysql/common.cxx
@@ -152,17 +152,18 @@ namespace relational
member_image_type::
member_image_type (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_image_type::
+ member_image_type ()
+ : relational::member_base (0, 0, string (), string ()) {}
member_image_type::
member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : relational::member_base (type, fq_type, key_prefix)
- {
- }
+ : relational::member_base (type, ct, fq_type, key_prefix) {}
string member_image_type::
image_type (semantics::data_member& m)
@@ -294,18 +295,20 @@ namespace relational
member_database_type_id::
member_database_type_id (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_database_type_id::
+ member_database_type_id ()
+ : member_base::base (0, 0, string (), string ()), // virtual base
+ base (0, 0, string (), string ()) {}
member_database_type_id::
member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base::base (type, fq_type, key_prefix), // virtual base
- base (type, fq_type, key_prefix)
- {
- }
+ : member_base::base (type, ct, fq_type, key_prefix), // virtual base
+ base (type, ct, fq_type, key_prefix) {}
string member_database_type_id::
database_type_id (type& m)
diff --git a/odb/relational/mysql/common.hxx b/odb/relational/mysql/common.hxx
index cf159c1..38ee0b1 100644
--- a/odb/relational/mysql/common.hxx
+++ b/odb/relational/mysql/common.hxx
@@ -85,7 +85,9 @@ namespace relational
member_base
{
member_image_type (base const&);
- member_image_type (semantics::type* type = 0,
+ member_image_type ();
+ member_image_type (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
virtual string
@@ -126,8 +128,9 @@ namespace relational
member_base
{
member_database_type_id (base const&);
-
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id ();
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
diff --git a/odb/relational/mysql/context.cxx b/odb/relational/mysql/context.cxx
index d2232bc..c03a77a 100644
--- a/odb/relational/mysql/context.cxx
+++ b/odb/relational/mysql/context.cxx
@@ -199,14 +199,17 @@ namespace relational
struct has_grow_member: member_base
{
+ has_grow_member (bool& r, user_section* section = 0)
+ : relational::member_base (0, 0, string (), string (), section),
+ r_ (r) {}
+
has_grow_member (bool& r,
- user_section* section = 0,
- semantics::type* type = 0,
+ user_section* section,
+ semantics::type* t,
+ const custom_cxx_type* ct,
string const& key_prefix = string ())
- : relational::member_base (type, string (), key_prefix, section),
- r_ (r)
- {
- }
+ : relational::member_base (t, ct, string (), key_prefix, section),
+ r_ (r) {}
virtual bool
pre (member_info& mi)
@@ -279,16 +282,19 @@ namespace relational
grow_impl (semantics::data_member& m)
{
bool r (false);
- has_grow_member mt (r);
+ has_grow_member mt (r);
mt.traverse (m);
return r;
}
bool context::
- grow_impl (semantics::data_member& m, semantics::type& t, string const& kp)
+ grow_impl (semantics::data_member& m,
+ semantics::type& t,
+ const custom_cxx_type* ct,
+ string const& kp)
{
bool r (false);
- has_grow_member mt (r, 0, &t, kp);
+ has_grow_member mt (r, 0, &t, ct, kp);
mt.traverse (m);
return r;
}
diff --git a/odb/relational/mysql/context.hxx b/odb/relational/mysql/context.hxx
index 6fd8bd6..d7e1dc4 100644
--- a/odb/relational/mysql/context.hxx
+++ b/odb/relational/mysql/context.hxx
@@ -119,7 +119,10 @@ namespace relational
grow_impl (semantics::data_member&);
virtual bool
- grow_impl (semantics::data_member&, semantics::type&, string const&);
+ grow_impl (semantics::data_member&,
+ semantics::type&,
+ const custom_cxx_type*,
+ string const&);
protected:
virtual string
diff --git a/odb/relational/oracle/common.cxx b/odb/relational/oracle/common.cxx
index b3ac7e2..30e4c79 100644
--- a/odb/relational/oracle/common.cxx
+++ b/odb/relational/oracle/common.cxx
@@ -172,17 +172,18 @@ namespace relational
member_image_type::
member_image_type (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_image_type::
+ member_image_type ()
+ : relational::member_base (0, 0, string (), string ()) {}
member_image_type::
member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : relational::member_base (type, fq_type, key_prefix)
- {
- }
+ : relational::member_base (type, ct, fq_type, key_prefix) {}
string member_image_type::
image_type (semantics::data_member& m)
@@ -305,18 +306,20 @@ namespace relational
member_database_type_id::
member_database_type_id (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_database_type_id::
+ member_database_type_id ()
+ : member_base::base (0, 0, string (), string ()), // virtual base
+ base (0, 0, string (), string ()) {}
member_database_type_id::
member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base::base (type, fq_type, key_prefix), // virtual base
- base (type, fq_type, key_prefix)
- {
- }
+ : member_base::base (type, ct, fq_type, key_prefix), // virtual base
+ base (type, ct, fq_type, key_prefix) {}
string member_database_type_id::
database_type_id (type& m)
diff --git a/odb/relational/oracle/common.hxx b/odb/relational/oracle/common.hxx
index 66cbfd2..a2a34a4 100644
--- a/odb/relational/oracle/common.hxx
+++ b/odb/relational/oracle/common.hxx
@@ -93,7 +93,9 @@ namespace relational
member_base
{
member_image_type (base const&);
- member_image_type (semantics::type* type = 0,
+ member_image_type ();
+ member_image_type (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
virtual string
@@ -146,8 +148,9 @@ namespace relational
member_base
{
member_database_type_id (base const&);
-
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id ();
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
diff --git a/odb/relational/pgsql/common.cxx b/odb/relational/pgsql/common.cxx
index 7611299..43adb6a 100644
--- a/odb/relational/pgsql/common.cxx
+++ b/odb/relational/pgsql/common.cxx
@@ -133,12 +133,15 @@ namespace relational
}
member_image_type::
+ member_image_type ()
+ : relational::member_base (0, 0, string (), string ()) {}
+
+ member_image_type::
member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : relational::member_base (type, fq_type, key_prefix)
- {
- }
+ : relational::member_base (type, ct, fq_type, key_prefix) {}
string member_image_type::
image_type (semantics::data_member& m)
@@ -244,18 +247,20 @@ namespace relational
member_database_type_id::
member_database_type_id (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_database_type_id::
+ member_database_type_id ()
+ : member_base::base (0, 0, string (), string ()), // virtual base
+ base (0, 0, string (), string ()) {}
member_database_type_id::
member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base::base (type, fq_type, key_prefix), // virtual base
- base (type, fq_type, key_prefix)
- {
- }
+ : member_base::base (type, ct, fq_type, key_prefix), // virtual base
+ base (type, ct, fq_type, key_prefix) {}
string member_database_type_id::
database_type_id (type& m)
diff --git a/odb/relational/pgsql/common.hxx b/odb/relational/pgsql/common.hxx
index be6e33b..0d22aff 100644
--- a/odb/relational/pgsql/common.hxx
+++ b/odb/relational/pgsql/common.hxx
@@ -73,7 +73,9 @@ namespace relational
member_base
{
member_image_type (base const&);
- member_image_type (semantics::type* type = 0,
+ member_image_type ();
+ member_image_type (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
virtual string
@@ -114,8 +116,9 @@ namespace relational
member_base
{
member_database_type_id (base const&);
-
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id ();
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
diff --git a/odb/relational/pgsql/context.cxx b/odb/relational/pgsql/context.cxx
index 1910187..f8a9fe2 100644
--- a/odb/relational/pgsql/context.cxx
+++ b/odb/relational/pgsql/context.cxx
@@ -155,14 +155,17 @@ namespace relational
struct has_grow_member: member_base
{
+ has_grow_member (bool& r, user_section* section = 0)
+ : relational::member_base (0, 0, string (), string (), section),
+ r_ (r) {}
+
has_grow_member (bool& r,
- user_section* section = 0,
- semantics::type* type = 0,
+ user_section* section,
+ semantics::type* t,
+ const custom_cxx_type* ct,
string const& key_prefix = string ())
- : relational::member_base (type, string (), key_prefix, section),
- r_ (r)
- {
- }
+ : relational::member_base (t, ct, string (), key_prefix, section),
+ r_ (r) {}
virtual bool
pre (member_info& mi)
@@ -229,10 +232,13 @@ namespace relational
}
bool context::
- grow_impl (semantics::data_member& m, semantics::type& t, string const& kp)
+ grow_impl (semantics::data_member& m,
+ semantics::type& t,
+ const custom_cxx_type* ct,
+ string const& kp)
{
bool r (false);
- has_grow_member mt (r, 0, &t, kp);
+ has_grow_member mt (r, 0, &t, ct, kp);
mt.traverse (m);
return r;
}
diff --git a/odb/relational/pgsql/context.hxx b/odb/relational/pgsql/context.hxx
index b49ea99..53b1c95 100644
--- a/odb/relational/pgsql/context.hxx
+++ b/odb/relational/pgsql/context.hxx
@@ -120,7 +120,10 @@ namespace relational
grow_impl (semantics::data_member&);
virtual bool
- grow_impl (semantics::data_member&, semantics::type&, string const&);
+ grow_impl (semantics::data_member&,
+ semantics::type&,
+ const custom_cxx_type*,
+ string const&);
protected:
virtual string
diff --git a/odb/relational/pgsql/source.cxx b/odb/relational/pgsql/source.cxx
index d009a7c..2bbe232 100644
--- a/odb/relational/pgsql/source.cxx
+++ b/odb/relational/pgsql/source.cxx
@@ -911,7 +911,7 @@ namespace relational
// Statement types.
//
- semantics::type& vt (container_vt (t));
+ semantics::type& vt (container_vt (m));
semantics::type& idt (container_idt (m));
// insert statement types.
@@ -932,13 +932,13 @@ namespace relational
case ck_ordered:
{
if (!unordered (m))
- so.traverse (m, container_it (t), "index", "index");
+ so.traverse (m, container_it (m), "index", "index");
break;
}
case ck_map:
case ck_multimap:
{
- so.traverse (m, container_kt (t), "key", "key");
+ so.traverse (m, container_kt (m), "key", "key");
break;
}
case ck_set:
@@ -982,7 +982,7 @@ namespace relational
case ck_ordered:
{
if (!unordered (m))
- so.traverse (m, container_it (t), "index", "index");
+ so.traverse (m, container_it (m), "index", "index");
break;
}
case ck_map:
@@ -1018,7 +1018,7 @@ namespace relational
case ck_ordered:
{
if (!unordered (m))
- so.traverse (m, container_it (t), "index", "index");
+ so.traverse (m, container_it (m), "index", "index");
break;
}
case ck_map:
diff --git a/odb/relational/processor.cxx b/odb/relational/processor.cxx
index 09a468b..2979a34 100644
--- a/odb/relational/processor.cxx
+++ b/odb/relational/processor.cxx
@@ -400,25 +400,16 @@ namespace relational
process_container (semantics::data_member& m, semantics::type& t)
{
container_kind_type ck (t.get<container_kind_type> ("container-kind"));
- semantics::type* vt (t.get<semantics::type*> ("value-tree-type"));
- semantics::type* it (0);
- semantics::type* kt (0);
- semantics::names* vh (t.get<semantics::names*> ("value-tree-hint"));
+ semantics::names* vh (0);
semantics::names* ih (0);
semantics::names* kh (0);
- if (ck == ck_ordered)
- {
- it = t.get<semantics::type*> ("index-tree-type");
- ih = t.get<semantics::names*> ("index-tree-hint");
- }
-
- if (ck == ck_map || ck == ck_multimap)
- {
- kt = t.get<semantics::type*> ("key-tree-type");
- kh = t.get<semantics::names*> ("key-tree-hint");
- }
+ semantics::type* vt (&utype (m, vh, "value"));
+ semantics::type* it (ck == ck_ordered ? &utype (m, ih, "index") : 0);
+ semantics::type* kt (ck == ck_map || ck == ck_multimap
+ ? &utype (m, kh, "key")
+ : 0);
// Process member data.
//
@@ -1483,10 +1474,10 @@ namespace relational
}
virtual void
- traverse_container (semantics::data_member& m, semantics::type& t)
+ traverse_container (semantics::data_member& m, semantics::type&)
{
if (semantics::class_* c =
- object_pointer (context::container_vt (t)))
+ object_pointer (context::container_vt (m)))
{
if (inverse (m, "value"))
return;
diff --git a/odb/relational/source.cxx b/odb/relational/source.cxx
index 60d3b34..83e3c40 100644
--- a/odb/relational/source.cxx
+++ b/odb/relational/source.cxx
@@ -4655,8 +4655,8 @@ traverse_view (type& c)
//
semantics::class_* c (0);
- if (semantics::type* cont = container (m))
- c = object_pointer (container_vt (*cont));
+ if (container (m))
+ c = object_pointer (container_vt (m));
else
c = object_pointer (utype (m));
@@ -5899,8 +5899,8 @@ namespace relational
type* t;
- if (type* c = context::container (*m))
- t = &context::container_vt (*c);
+ if (context::container (*m))
+ t = &context::container_vt (*m);
else
t = &context::utype (*m);
diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx
index 81e182b..e67931f 100644
--- a/odb/relational/source.hxx
+++ b/odb/relational/source.hxx
@@ -1208,9 +1208,9 @@ namespace relational
}
virtual void
- traverse_container (semantics::data_member& m, semantics::type& t)
+ traverse_container (semantics::data_member& m, semantics::type&)
{
- semantics::type& vt (container_vt (t));
+ semantics::type& vt (container_vt (m));
if (semantics::class_* cvt = composite_wrapper (vt))
{
@@ -1328,20 +1328,17 @@ namespace relational
bind_member (string const& var = string (),
string const& arg = string (),
object_section* section = 0)
- : member_base (var, 0, string (), string (), section),
- arg_override_ (arg)
- {
- }
+ : member_base (var, 0, 0, string (), string (), section),
+ arg_override_ (arg) {}
bind_member (string const& var,
string const& arg,
semantics::type& t,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base (var, &t, fq_type, key_prefix),
- arg_override_ (arg)
- {
- }
+ : member_base (var, &t, ct, fq_type, key_prefix),
+ arg_override_ (arg) {}
protected:
string arg_override_;
@@ -1352,10 +1349,7 @@ namespace relational
{
typedef bind_member_impl base_impl;
- bind_member_impl (base const& x)
- : base (x)
- {
- }
+ bind_member_impl (base const& x): base (x) {}
typedef typename member_base_impl<T>::member_info member_info;
@@ -1714,19 +1708,16 @@ namespace relational
grow_member (size_t& index,
string const& var = string (),
user_section* section = 0)
- : member_base (var, 0, string (), string (), section),
- index_ (index)
- {
- }
+ : member_base (var, 0, 0, string (), string (), section),
+ index_ (index) {}
grow_member (size_t& index,
string const& var,
semantics::type& t,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base (var, &t, fq_type, key_prefix), index_ (index)
- {
- }
+ : member_base (var, &t, ct, fq_type, key_prefix), index_ (index) {}
protected:
size_t& index_;
@@ -1971,7 +1962,7 @@ namespace relational
init_image_member (string const& var = string (),
string const& member = string (),
user_section* section = 0)
- : member_base (var, 0, string (), string (), section),
+ : member_base (var, 0, 0, string (), string (), section),
member_override_ (member)
{
}
@@ -1979,9 +1970,10 @@ namespace relational
init_image_member (string const& var,
string const& member,
semantics::type& t,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base (var, &t, fq_type, key_prefix),
+ : member_base (var, &t, ct, fq_type, key_prefix),
member_override_ (member)
{
}
@@ -1999,6 +1991,7 @@ namespace relational
init_image_member_impl (base const& x)
: base (x),
member_database_type_id_ (base::type_override_,
+ base::custom_override_,
base::fq_type_override_,
base::key_prefix_)
{
@@ -2339,7 +2332,8 @@ namespace relational
virtual void
traverse_composite (member_info& mi)
{
- bool grow (generate_grow && context::grow (mi.m, mi.t, key_prefix_));
+ bool grow (generate_grow &&
+ context::grow (mi.m, mi.t, mi.ct, key_prefix_));
if (grow)
os << "if (";
@@ -2433,7 +2427,7 @@ namespace relational
string const& var = string (),
bool ignore_implicit_discriminator = true,
user_section* section = 0)
- : member_base (var, 0, string (), string (), section),
+ : member_base (var, 0, 0, string (), string (), section),
member_override_ (member),
ignore_implicit_discriminator_ (ignore_implicit_discriminator)
{
@@ -2442,9 +2436,10 @@ namespace relational
init_value_member (string const& var,
string const& member,
semantics::type& t,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base (var, &t, fq_type, key_prefix),
+ : member_base (var, &t, ct, fq_type, key_prefix),
member_override_ (member),
ignore_implicit_discriminator_ (true)
{
@@ -2467,6 +2462,7 @@ namespace relational
init_value_member_impl (base const& x)
: base (x),
member_database_type_id_ (base::type_override_,
+ base::custom_override_,
base::fq_type_override_,
base::key_prefix_)
{
@@ -2966,7 +2962,7 @@ namespace relational
typedef init_view_pointer_member base;
init_view_pointer_member (bool pre, init_value_member const& ivm)
- : member_base ("", 0, "", "", 0),
+ : member_base (0, 0, string (), string (), 0),
pre_ (pre), init_value_member_ (ivm) {}
virtual bool
@@ -3438,7 +3434,11 @@ namespace relational
container_kind_type ck (container_kind (t));
- type& vt (container_vt (t));
+ const custom_cxx_type* vct (0);
+ const custom_cxx_type* ict (0);
+ const custom_cxx_type* kct (0);
+
+ type& vt (container_vt (m, &vct));
type* it (0);
type* kt (0);
@@ -3454,11 +3454,11 @@ namespace relational
{
if (!unordered (m))
{
- it = &container_it (t);
+ it = &container_it (m, &ict);
ordered = true;
if (generate_grow)
- grow = grow || context::grow (m, *it, "index");
+ grow = grow || context::grow (m, *it, ict, "index");
}
break;
@@ -3466,10 +3466,10 @@ namespace relational
case ck_map:
case ck_multimap:
{
- kt = &container_kt (t);
+ kt = &container_kt (m, &kct);
if (generate_grow)
- grow = grow || context::grow (m, *kt, "key");
+ grow = grow || context::grow (m, *kt, kct, "key");
break;
}
@@ -3485,7 +3485,7 @@ namespace relational
container_smart (t));
if (generate_grow)
- grow = grow || context::grow (m, vt, "value");
+ grow = grow || context::grow (m, vt, vct, "value");
bool eager_ptr (is_a (member_path_,
member_scope_,
@@ -3933,7 +3933,7 @@ namespace relational
os << "// index" << endl
<< "//" << endl;
instance<bind_member> bm (
- "index_", "c", *it, "index_type", "index");
+ "index_", "c", *it, ict, "index_type", "index");
bm->traverse (m);
}
break;
@@ -3943,7 +3943,8 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<bind_member> bm ("key_", "c", *kt, "key_type", "key");
+ instance<bind_member> bm (
+ "key_", "c", *kt, kct, "key_type", "key");
bm->traverse (m);
break;
}
@@ -3953,7 +3954,7 @@ namespace relational
os << "// value" << endl
<< "//" << endl;
instance<bind_member> bm (
- "value_", "c", vt, "value_type", "value");
+ "value_", "c", vt, vct, "value_type", "value");
bm->traverse (m);
break;
}
@@ -4004,7 +4005,7 @@ namespace relational
os << "// index" << endl
<< "//" << endl;
instance<bind_member> bm (
- "index_", "d", *it, "index_type", "index");
+ "index_", "d", *it, ict, "index_type", "index");
bm->traverse (m);
os << "n++;" // Simple value.
<< endl;
@@ -4016,7 +4017,8 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<bind_member> bm ("key_", "d", *kt, "key_type", "key");
+ instance<bind_member> bm (
+ "key_", "d", *kt, kct, "key_type", "key");
bm->traverse (m);
if (semantics::class_* c = composite_wrapper (*kt))
@@ -4039,7 +4041,8 @@ namespace relational
//
os << "// value" << endl
<< "//" << endl;
- instance<bind_member> bm ("value_", "d", vt, "value_type", "value");
+ instance<bind_member> bm (
+ "value_", "d", vt, vct, "value_type", "value");
bm->traverse (m);
os << "}";
@@ -4074,7 +4077,8 @@ namespace relational
os << "// value" << endl
<< "//" << endl;
- instance<bind_member> bm ("value_", "d", vt, "value_type", "value");
+ instance<bind_member> bm (
+ "value_", "d", vt, vct, "value_type", "value");
bm->traverse (m);
if (semantics::class_* c = composite_wrapper (vt))
@@ -4103,7 +4107,7 @@ namespace relational
os << "// index" << endl
<< "//" << endl;
instance<bind_member> bm (
- "index_", "c", *it, "index_type", "index");
+ "index_", "c", *it, ict, "index_type", "index");
bm->traverse (m);
}
break;
@@ -4113,7 +4117,8 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<bind_member> bm ("key_", "c", *kt, "key_type", "key");
+ instance<bind_member> bm (
+ "key_", "c", *kt, kct, "key_type", "key");
bm->traverse (m);
break;
}
@@ -4123,7 +4128,7 @@ namespace relational
os << "// value" << endl
<< "//" << endl;
instance<bind_member> bm (
- "value_", "c", vt, "value_type", "value");
+ "value_", "c", vt, vct, "value_type", "value");
bm->traverse (m);
break;
}
@@ -4159,7 +4164,7 @@ namespace relational
os << "// index" << endl
<< "//" << endl;
instance<grow_member> gm (
- index, "index_", *it, "index_type", "index");
+ index, "index_", *it, ict, "index_type", "index");
gm->traverse (m);
}
break;
@@ -4169,7 +4174,8 @@ namespace relational
{
os << "// key" << endl
<< "//" << endl;
- instance<grow_member> gm (index, "key_", *kt, "key_type", "key");
+ instance<grow_member> gm (
+ index, "key_", *kt, kct, "key_type", "key");
gm->traverse (m);
break;
}
@@ -4183,7 +4189,7 @@ namespace relational
os << "// value" << endl
<< "//" << endl;
instance<grow_member> gm (
- index, "value_", vt, "value_type", "value");
+ index, "value_", vt, vct, "value_type", "value");
gm->traverse (m);
os << "if (grew)" << endl
@@ -4246,7 +4252,7 @@ namespace relational
<< "if (j != 0)";
instance<init_image_member> im (
- "index_", "*j", *it, "index_type", "index");
+ "index_", "*j", *it, ict, "index_type", "index");
im->traverse (m);
}
break;
@@ -4259,7 +4265,7 @@ namespace relational
<< "if (k != 0)";
instance<init_image_member> im (
- "key_", "*k", *kt, "key_type", "key");
+ "key_", "*k", *kt, kct, "key_type", "key");
im->traverse (m);
break;
@@ -4275,7 +4281,7 @@ namespace relational
<< "//" << endl;
{
instance<init_image_member> im (
- "value_", "v", vt, "value_type", "value");
+ "value_", "v", vt, vct, "value_type", "value");
im->traverse (m);
}
@@ -4305,7 +4311,7 @@ namespace relational
<< endl;
instance<init_image_member> im (
- "index_", "j", *it, "index_type", "index");
+ "index_", "j", *it, ict, "index_type", "index");
im->traverse (m);
os << "}";
@@ -4379,7 +4385,7 @@ namespace relational
<< "//" << endl;
instance<init_value_member> im (
- "index_", "j", *it, "index_type", "index");
+ "index_", "j", *it, ict, "index_type", "index");
im->traverse (m);
}
@@ -4392,7 +4398,7 @@ namespace relational
<< "//" << endl;
instance<init_value_member> im (
- "key_", "k", *kt, "key_type", "key");
+ "key_", "k", *kt, kct, "key_type", "key");
im->traverse (m);
break;
@@ -4409,7 +4415,7 @@ namespace relational
// type override.
//
instance<init_value_member> im (
- "value_", "v", vt, "value_type", "value");
+ "value_", "v", vt, vct, "value_type", "value");
im->traverse (m);
}
os << "}";
diff --git a/odb/relational/sqlite/common.cxx b/odb/relational/sqlite/common.cxx
index d64c252..36a0e86 100644
--- a/odb/relational/sqlite/common.cxx
+++ b/odb/relational/sqlite/common.cxx
@@ -62,17 +62,18 @@ namespace relational
member_image_type::
member_image_type (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_image_type::
+ member_image_type ()
+ : relational::member_base (0, 0, string (), string ()) {}
member_image_type::
member_image_type (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : relational::member_base (type, fq_type, key_prefix)
- {
- }
+ : relational::member_base (type, ct, fq_type, key_prefix) {}
string member_image_type::
image_type (semantics::data_member& m)
@@ -116,18 +117,20 @@ namespace relational
member_database_type_id::
member_database_type_id (base const& x)
: member_base::base (x), // virtual base
- base (x)
- {
- }
+ base (x) {}
+
+ member_database_type_id::
+ member_database_type_id ()
+ : member_base::base (0, 0, string (), string ()), // virtual base
+ base (0, 0, string (), string ()) {}
member_database_type_id::
member_database_type_id (semantics::type* type,
+ const custom_cxx_type* ct,
string const& fq_type,
string const& key_prefix)
- : member_base::base (type, fq_type, key_prefix), // virtual base
- base (type, fq_type, key_prefix)
- {
- }
+ : member_base::base (type, ct, fq_type, key_prefix), // virtual base
+ base (type, ct, fq_type, key_prefix) {}
string member_database_type_id::
database_type_id (type& m)
diff --git a/odb/relational/sqlite/common.hxx b/odb/relational/sqlite/common.hxx
index 808f489..bea0889 100644
--- a/odb/relational/sqlite/common.hxx
+++ b/odb/relational/sqlite/common.hxx
@@ -62,7 +62,9 @@ namespace relational
member_base
{
member_image_type (base const&);
- member_image_type (semantics::type* type = 0,
+ member_image_type ();
+ member_image_type (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
virtual string
@@ -88,7 +90,9 @@ namespace relational
member_base
{
member_database_type_id (base const&);
- member_database_type_id (semantics::type* type = 0,
+ member_database_type_id ();
+ member_database_type_id (semantics::type* type,
+ const custom_cxx_type*,
string const& fq_type = string (),
string const& key_prefix = string ());
diff --git a/odb/relational/sqlite/context.cxx b/odb/relational/sqlite/context.cxx
index 1b60945..007d67f 100644
--- a/odb/relational/sqlite/context.cxx
+++ b/odb/relational/sqlite/context.cxx
@@ -162,14 +162,17 @@ namespace relational
struct has_grow_member: member_base
{
+ has_grow_member (bool& r, user_section* section = 0)
+ : relational::member_base (0, 0, string (), string (), section),
+ r_ (r) {}
+
has_grow_member (bool& r,
- user_section* section = 0,
- semantics::type* type = 0,
+ user_section* section,
+ semantics::type* t,
+ const custom_cxx_type* ct,
string const& key_prefix = string ())
- : relational::member_base (type, string (), key_prefix, section),
- r_ (r)
- {
- }
+ : relational::member_base (t, ct, string (), key_prefix, section),
+ r_ (r) {}
virtual bool
pre (member_info& mi)
@@ -224,10 +227,13 @@ namespace relational
}
bool context::
- grow_impl (semantics::data_member& m, semantics::type& t, string const& kp)
+ grow_impl (semantics::data_member& m,
+ semantics::type& t,
+ const custom_cxx_type* ct,
+ string const& kp)
{
bool r (false);
- has_grow_member mt (r, 0, &t, kp);
+ has_grow_member mt (r, 0, &t, ct, kp);
mt.traverse (m);
return r;
}
diff --git a/odb/relational/sqlite/context.hxx b/odb/relational/sqlite/context.hxx
index 968767f..7c5107e 100644
--- a/odb/relational/sqlite/context.hxx
+++ b/odb/relational/sqlite/context.hxx
@@ -73,7 +73,10 @@ namespace relational
grow_impl (semantics::data_member&);
virtual bool
- grow_impl (semantics::data_member&, semantics::type&, string const&);
+ grow_impl (semantics::data_member&,
+ semantics::type&,
+ const custom_cxx_type*,
+ string const&);
protected:
virtual string
diff --git a/odb/validator.cxx b/odb/validator.cxx
index a843b59..a76848f 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1227,11 +1227,11 @@ namespace
}
virtual void
- traverse_container (semantics::data_member& m, semantics::type& t)
+ traverse_container (semantics::data_member& m, semantics::type&)
{
traverse_simple (m); // Do simple value tests.
- if (semantics::class_* c = object_pointer (container_vt (t)))
+ if (semantics::class_* c = object_pointer (container_vt (m)))
{
// Pointer must be deleted before the pointed-to object.
//