Eric,

Possibly the following paragraph from the Julia manual may be relevant.  
This paragraph is an excerpt from the section on parametric type aliases in 
the chapter "Types."  I am quite familiar with this paragraph because I 
authored it in a PR it after I was burned by a similar issue!

-- Steve Vavasis


"This declaration of Vector creates a subtype relation Vector{Int} <: Vector. 
However, it is not always the case that a parametric typealias statement 
creates such a relation; for example, the statement:

typealias AA{T} Array{Array{T,1},1}
 

does not create the relation AA{Int} <: AA. The reason is that 
Array{Array{T,1},1} is not an abstract type at all; in fact, it is a 
concrete type describing a 1-dimensional array in which each entry is an 
object of type Array{T,1} for some value of T."






On Monday, October 31, 2016 at 7:43:58 PM UTC-4, Eric Davies wrote:
>
> I am getting confusing behaviour with some complex type aliases while 
> using Cxx.jl and I was hoping someone could point out what is going on.
>
> These are the aliases:
>
> typealias CppAWSErrorType{C, I<:Integer} CppTemplate{CppBaseType{Symbol(
> "Aws::Client::AWSError")}, Tuple{CppEnum{C, I}}}
> typealias CppAWSError{C, I<:Integer, Q} CppRef{CppAWSErrorType{C, I}, Q}
>
> ...
> aws_raw_error = @cxx list_buckets_outcome->GetError()
> thetype = AWSCxx.CppAWSError{Symbol("Aws::S3::S3Errors"), Int32, (false, 
> false, false)}
>
> @test typeof(aws_raw_error) <: thetype  # success
> @test typeof(aws_raw_error) == thetype  # success
> @test isa(aws_raw_error, thetype)  # success
> @test typeof(aws_raw_error) <: AWSCxx.CppAWSError  # failure
> @test isa(aws_raw_error, AWSCxx.CppAWSError)  # failure
>
> Can anyone help?
>

Reply via email to