Need help with a static inventory of dynamic groups

===================================================
Here is my static inventory of dynamic groups

[tag_ENV_prod]
[tag_ROLES_bastion]
[prod-bastion:children]
tag_ROLES_bastion:&tag_ENV_prod
[prod-servers:children]
tag_ENV_prod:!tag_ROLES_bastion

===================================================
Calling the groups via an adhoc ansible command does NOT work.

$ ansible 'prod-bastion' -i ec2.py --list-hosts
 [WARNING]: provided hosts list is empty, only localhost is available
  hosts (0):
$ ansible 'prod-servers' -i ec2.py --list-hosts
 [WARNING]: provided hosts list is empty, only localhost is available
  hosts (0):

===================================================
This however works

$ ansible 'tag_ROLES_bastion:&tag_ENV_prod' -i ec2.py --list-hosts
  hosts (1):
    192.168.1.4
$ ansible '\!tag_ROLES_bastion:tag_ENV_prod' -i ec2.py --list-hosts
  hosts (8):
    192.168.1.12
    192.168.1.30

Why is it not possible to perform complex pattern matching in the inventory? How do other companies handle this?