clang ++ 和 g ++ 在下一个程序中有不同的行为:
<?php
namespace app\PibeBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Translatable\Translatable;
use Application\Sonata\MediaBundle\Entity\Media;
/**
* Pibe
*
* @ORM\Table()
* @ORM\Entity
*/
class pibe
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @var \Application\Sonata\MediaBundle\Entity\Media
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"}, fetch="LAZY")
*/
private $imagen;
/**
* @var string
* @var \Application\Sonata\MediaBundle\Entity\Media
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"}, fetch="LAZY")
*/
private $logoEs;
/**
* @var string
* @var \Application\Sonata\MediaBundle\Entity\Media
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"}, fetch="LAZY")
*/
private $logoEn;
/**
* @var string
* @Gedmo\Translatable
* @ORM\Column(name="titulo", type="text",nullable=true)
*/
private $titulo;
/**
* @var string
* @Gedmo\Translatable
* @ORM\Column(name="script", type="text", nullable=true)
*/
private $script;
/**
* @var string
*/
private $scriptEn;
/**
* Set imagen
*
* @param string $imagen
* @return ImagenesHome
*/
public function setScript($script)
{
$this->script = $script;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getScript()
{
return $this->script;
}
/**
* Set imagen
*
* @param string $imagen
* @return ImagenesHome
*/
public function setScriptEn($scriptEn)
{
$this->scriptEn = $scriptEn;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getScriptEn()
{
return $this->scriptEn;
}
/**
* @var string
*/
private $tituloEn;
/**
* @var string
* @Gedmo\Translatable
* @ORM\Column(name="texto", type="text",nullable=true)
*/
private $texto;
/**
* @var string
*/
private $textoEn;
/**
* @var boolean
*
* @ORM\Column(name="activo", type="boolean")
*/
private $activo;
/**
* @var integer
*
* @ORM\Column(name="ranking", type="integer")
*/
private $ranking;
/**
* @var string
* @Gedmo\Locale
*/
private $locale;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set imagen
*
* @param string $imagen
* @return BannerHome
*/
public function setImagen(Media $imagen=null)
{
$this->imagen = $imagen;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getImagen()
{
return $this->imagen;
}
/**
* Set imagen
*
* @param string $imagen
* @return BannerHome
*/
public function setLogoEs(Media $logoEs)
{
$this->logoEs = $logoEs;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getLogoEs()
{
return $this->logoEs;
}
/**
* Set imagen
*
* @param string $imagen
* @return BannerHome
*/
public function setLogoEn(Media $logoEn)
{
$this->logoEn = $logoEn;
return $this;
}
/**
* Get imagen
*
* @return string
*/
public function getLogoEn()
{
return $this->logoEn;
}
/**
* Set titulo
*
* @param string $titulo
* @return BannerHome
*/
public function setTitulo($titulo)
{
$this->titulo = $titulo;
return $this;
}
/**
* Get titulo
*
* @return string
*/
public function getTitulo()
{
return $this->titulo;
}
/**
* Set titulo
*
* @param string $titulo
* @return BannerHome
*/
public function setTituloEn($tituloEn)
{
$this->tituloEn = $tituloEn;
return $this;
}
/**
* Get titulo
*
* @return string
*/
public function getTituloEn()
{
return $this->tituloEn;
}
/**
* Set texto
*
* @param string $texto
* @return BannerHome
*/
public function setTexto($texto)
{
$this->texto = $texto;
return $this;
}
/**
* Get texto
*
* @return string
*/
public function getTexto()
{
return $this->texto;
}
/**
* Set texto
*
* @param string $texto
* @return BannerHome
*/
public function setTextoEn($textoEn)
{
$this->textoEn = $textoEn;
return $this;
}
/**
* Get texto
*
* @return string
*/
public function getTextoEn()
{
return $this->textoEn;
}
/**
* Set activoBoolean
*
* @param string $activoBoolean
* @return BannerHome
*/
public function setActivo($activo)
{
$this->activo = $activo;
return $this;
}
/**
* Get activoBoolean
*
* @return string
*/
public function getActivo()
{
return $this->activo;
}
/**
* Set ranking
*
* @param integer $ranking
* @return BannerHome
*/
public function setRanking($ranking)
{
$this->ranking = $ranking;
return $this;
}
/**
* Get ranking
*
* @return integer
*/
public function getRanking()
{
return $this->ranking;
}
public function setTranslatableLocale($locale) {
$this->locale = $locale;
}
}
它只是试图恢复传递的参数并将一些函数应用于它们。
对于 G ++ ,它编译得很好,但对于 clang ++ (甚至来自主干),它会出现以下错误:
错误:没有匹配函数来调用'apply_inverse'
我认为原因在于,在上部重载中,函数原型中的参数包后面有一个参数。但是显式指定了参数包中所有参数的类型。
编译器接受代码是否正确?
答案 0 :(得分:0)
没有具体说明是哪个版本的 Clang 拒绝了上面的代码。
但此时 Clang 12 接受了它,以及 GCC 和 MSVC: https://gcc.godbolt.org/z/qMc9fKTEf
所以代码是完全合法的。