Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Olivier B.
pybind11
Commits
260bc58f
Commit
260bc58f
authored
Jan 18, 2016
by
Wenzel Jakob
Browse files
improved SFINAE in type_caster_generic (closes #70)
parent
92b2f452
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/pybind11/cast.h
View file @
260bc58f
...
...
@@ -209,11 +209,11 @@ public:
operator
type
*
()
{
return
(
type
*
)
value
;
}
operator
type
&
()
{
return
*
((
type
*
)
value
);
}
protected:
template
<
typename
T
=
type
,
typename
std
::
enable_if
<
std
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
template
<
typename
T
=
type
,
typename
std
::
enable_if
<
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
static
void
*
copy_constructor
(
const
void
*
arg
)
{
return
new
type
(
*
((
const
type
*
)
arg
));
}
template
<
typename
T
=
type
,
typename
std
::
enable_if
<!
std
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
template
<
typename
T
=
type
,
typename
std
::
enable_if
<!
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
static
void
*
copy_constructor
(
const
void
*
)
{
return
nullptr
;
}
};
...
...
include/pybind11/common.h
View file @
260bc58f
...
...
@@ -240,6 +240,14 @@ template <typename T> struct intrinsic_type<T&&> { typedef type
template
<
typename
T
,
size_t
N
>
struct
intrinsic_type
<
const
T
[
N
]
>
{
typedef
typename
intrinsic_type
<
T
>::
type
type
;
};
template
<
typename
T
,
size_t
N
>
struct
intrinsic_type
<
T
[
N
]
>
{
typedef
typename
intrinsic_type
<
T
>::
type
type
;
};
/** \brief SFINAE helper class to check if a copy constructor is usable (in contrast to
* std::is_copy_constructible, this class also checks if the 'new' operator is accessible */
template
<
typename
T
>
struct
is_copy_constructible
{
template
<
typename
T2
>
static
std
::
true_type
test
(
decltype
(
new
T2
(
std
::
declval
<
T2
>
()))
*
);
template
<
typename
T2
>
static
std
::
false_type
test
(...);
static
const
bool
value
=
std
::
is_same
<
std
::
true_type
,
decltype
(
test
<
T
>
(
nullptr
))
>::
value
;
};
/// Helper type to replace 'void' in some expressions
struct
void_type
{
};
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment